【问题标题】:ListView for Django not Working but function based view is workingListView for Django 不工作,但基于函数的视图工作
【发布时间】:2018-01-07 09:25:28
【问题描述】:

当我使用以下代码使用基于函数的视图时:

从 django.views 导入视图 from django.views.generic import TemplateView, ListView

from .models import Restaurant
def restaurant_listview(request):
    template = 'restaurants/restaurants_list.html'
    context = {
    "queryset" : Restaurant.objects.order_by('-updated')
    }
    return render (request, template, context)

它正在使用如下保存的 url 文件:

from django.conf.urls import url
from django.contrib import admin
from restaurants import views

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^restaurants/$', views.restaurant_listview),
]

但是当我尝试对基于类的视图做同样的事情时,它不起作用,只有以下部分似乎不起作用:

<ul>
  {% for obj in queryset %}
  <li>{{obj.name}}, {{obj.location}}, {{obj.category}}, {{obj.timestamp}}</li>
  {% endfor %}
</ul>

以下部分工作正常:

{% extends 'base.html' %}
{% block title %}
Restaurants List {{ block.super }}
{% endblock %}
{% block content %}
<h1>Restaurants</h1>

对于基于类的视图,我的 views.py 是:

class RestaurantListView(ListView):
    queryset = Restaurant.objects.all()
    template_name = 'restaurants/restaurants_list.html'

而 urls.py 是:

url(r'^restaurants$', RestaurantListView.as_view(), name='Home')

附:我正在关注本指南:https://www.youtube.com/watch?v=yDv5FIAeyoY&t=25471s

【问题讨论】:

    标签: django django-views


    【解决方案1】:

    对于列表视图,您应该将模板更改为:

    {% for obj in restaurant_list %}
    

    或者,如果你真的想在模板中使用变量queryset,那么设置context_object_name

    class RestaurantListView(ListView):
         queryset = Restaurant.objects.all()
         template_name = 'restaurants/restaurants_list.html'
         context_object_name = 'queryset' 
    

    【讨论】:

      猜你喜欢
      • 2020-12-25
      • 2013-01-20
      • 2017-11-10
      • 2022-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-15
      • 2018-05-20
      相关资源
      最近更新 更多