【问题标题】:Django - Unable to Display Values on PageDjango - 无法在页面上显示值
【发布时间】:2021-07-14 00:37:29
【问题描述】:

我无法在主页上显示数据库中的值。我不知道我做错了什么。以下是我的html

HTML

<!DOCTYPE html>
<html>
    <head>
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js" async></script>
    </head>

    <div class="container">
        {% for manhour in manhours %}
            <div class="article-metadata">
              <a class="mr-2" href="#">{{ manhour.station }}</a>
              <small class="text-muted">{{ manhour.date|date:"F d, Y" }}</small>
            </div>
            <h2><a class="article-title" href="{% url 'manhour-detail' manhour.id %}">{{ manhour.station }}</a></h2>
        {% endfor %}
    </div>
    <div class="user_panel">
                <a href="/logout">logout</a>
    </div>
    <div class="user_panel">
                <a href="/manhour/new">Upload</a>
    </div>

</html>

view.py

# Create your views here.
from django.shortcuts import render, redirect
from django.contrib.auth.mixins import LoginRequiredMixin, UserPassesTestMixin
from django.views.generic import (
    ListView,
    DetailView,
    CreateView,
    UpdateView,
    DeleteView
)
from .form import InputForm
from manhour.models import ManHour 
from django.contrib.auth.forms import UserCreationForm, AuthenticationForm
from django.contrib import messages
from django.contrib.auth import login, logout, authenticate
from django.urls import reverse


def login_request(request):
    if request.method == 'POST':
        form = AuthenticationForm(request=request, data=request.POST)
        if form.is_valid():
            username = form.cleaned_data.get('username')
            password = form.cleaned_data.get('password')
            user = authenticate(username=username, password=password)
            if user is not None:
                login(request, user)
                messages.info(request, f"You are now logged in as {username}")
                return redirect('manhour-home')
            else:
                messages.error(request, "Invalid username or password.")
        else:
            messages.error(request, "Invalid username or password.")
    else:
        form = AuthenticationForm()
    return render(request = request,
                    template_name = "manhour/login.html",
                    context={"form":form})


class PostListView(LoginRequiredMixin, ListView):
    model = ManHour
    template_name = 'manhour/home.html'  # <app>/<model>_<viewtype>.html
    context_object_name = 'manhour'
    # ordering = ['-date']


class PostDetailView(LoginRequiredMixin, DetailView):
    model = ManHour

urls.py

from django.contrib import admin
from django.urls import path
# from manhour.views import login_request
from manhour.views import (
    PostListView,
    PostDetailView,
    PostCreateView,
    PostUpdateView,
    login_request
)
from django.contrib.auth.views import LogoutView

urlpatterns = [
    path('admin/', admin.site.urls),
    path('login/', login_request, name='login'),
    path('', login_request, name='login'),
    path('manhour/', PostListView.as_view(), name='manhour-home'),
    path("logout/", LogoutView.as_view(), name="logout"),
    path('manhour/new/', PostCreateView.as_view(), name='manhour-create'),
    path('manhour/<int:pk>/', PostDetailView.as_view(), name='manhour-detail'),
    path('manhour/<int:pk>/update/', PostUpdateView.as_view(), name='manhour-update'),
]

谁能找出我为什么不能在我的manhour-home 页面上列出所有值?在主页上,我可以看到 logoutupload 按钮工作正常。但我无法在主页上查看数据库中的所有对象。

更新 我已将以下内容添加到 views.py

def home(request):
    context = {
        'manhour': ManHour.objects.all()
    }
    return render(request, 'manhour/home.html', context)

【问题讨论】:

  • 您的更新不起作用,因为您的主页链接到 PostListView。

标签: python django django-views django-forms django-urls


【解决方案1】:

您尚未定义需要在视图中显示的内容。您可以为视图定义 queryset 属性,或定义 get_queryset() 方法。

【讨论】:

  • 我已经添加了需要显示的内容,请参阅更新。我仍然在主页上看不到任何内容。
  • @Lopez:您在尝试访问主页时是否已登录?你有什么错误吗?
【解决方案2】:

您的上下文对象名称错误,在视图中您使用的是“工时”,而在您的主页模板中您使用的是“工时”。

所以,我认为这应该解决它。

def home(request):
    context = {
        'manhours': ManHour.objects.all()
    }
    return render(request, 'manhour/home.html', context)

【讨论】:

    猜你喜欢
    • 2015-05-17
    • 2020-10-20
    • 2015-05-06
    • 1970-01-01
    • 1970-01-01
    • 2021-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多