Python 循环的Django模板为空
我试图在django中构建一个细节视图,但模板中没有显示任何内容 views.pyPython 循环的Django模板为空,python,django,python-3.x,django-views,django-2.2,Python,Django,Python 3.x,Django Views,Django 2.2,我试图在django中构建一个细节视图,但模板中没有显示任何内容 views.py class MyDetailView(DetailView): model = Article template_name = 'detail.html' detail.html {% extends 'base.html' %} {% load i18n %} {% endblock %} {% block content %} {% for item in itemlist %} {{i
class MyDetailView(DetailView):
model = Article
template_name = 'detail.html'
detail.html
{% extends 'base.html' %}
{% load i18n %}
{% endblock %}
{% block content %}
{% for item in itemlist %}
{{item.pk}}
{{item.title}}
{% empty %}
There are no items in this list
{% endfor %}
{% endblock %}
为什么此处的模板中没有显示任何内容?您不会将名为
itemlist
的项目传递给详细视图中的模板。在列表视图
(看起来更合适)中,默认情况下它将使用名为对象列表
的上下文变量。由于变量不存在,将解析为空字符串
如果要通过项目列表
名称将文章
的查询集传递给上下文,可以设置:
来自django.views.generic import ListView的
类MyDetailView(ListView):
模型=文章
模板名称='detail.html'
context\u object\u name='itemlist'
正如Willem在评论中告诉你的,你在一个细节视图中,所以你不需要for循环来迭代,你可以在模板中显示细节,比如:{{item.pk}aDetailView
没有itemlist
传递给模板,(aListView
),但是我在/detail/5/'Article'对象处得到了这个错误TypeError是不可编辑的请求方法:获取请求URL:http://127.0.0.1:8000/detail/5/
这可能是因为我的URL<代码>路径('detail/',views.MyDetailView.as_view(),name='detail'),
@Snowball:aDetailView
项目当然不可编辑,因为一篇文章也不是一个iterables的集合。@Snowball:a如果你有一个DetailView
,为什么要使用{%for…%}
首先循环?但是当我使用ListView
时,我得到了所有结果,而不仅仅是这一个PK
我想要的结果
from django.views.generic import ListView
class MyDetailView(ListView):
model = Article
template_name = 'detail.html'
context_object_name = 'itemlist'