我已经开始学习django,我不确定通用视图是如何工作的。我多次阅读django文档,我无法清楚地了解泛型视图的工作原理。很奇怪,但效果很好。它从数据库中检索数据并在浏览器上呈现数据。
以下是 polls / urls.py 的摘录代码。
url(r'^$', views.IndexView.as_view(), name = 'index')
它将转到 views.py 中的 IndexView 类。
以下是 polls / views.py 的摘录代码。
from django.views import generic
from .models import Question, Choice
class IndexView(generic.ListView):
template_name = 'polls/index.html'
context_object_name = 'latest_question_list'
def get_queryset(self):
return Question.objects.order_by('-pub_date')[:5]
当我将 template_name 更改为某事时,异常发生如下。
TemplateDoesNotExist:polls / question_list.html
question_list.html 是什么意思?
它来自哪里?
这是 index.html 。
{% if latest_question_list %}
<ul>
{% for question in latest_question_list %}
<li>
<a href="{% url 'polls:detail' question.id %}">{{ question.question_text }}</a>
</li>
{% endfor %}
</ul>
{% else %}
<p>No polls are available.</p>
{% endif %}
如您所见, index.html 文件使用 latest_question_list 作为参数,但我不确定如何使用latest_question_list 。
在 views.py 文件中, context_object_name ='latest_question_list'是什么意思?
'latest_question_list'来自哪里? index.html 如何使用 latest_question_list ?
我是否在 views.py 中使用 context_object_name ?
get_queryset()函数的作用是什么?
答案 0 :(得分:1)
question_list.html是什么意思?
这意味着民意调查目录中有一个文件,如 index.html 如果您想要一个带有diff名称的文件,则必须更改
的名称template_name='polls/name_of_file_inside_polls'
我在views.py中使用context_object_name吗?
您可以在上下文中放置一些vars以在模板中使用它,这就是为什么您可以使用 latest_question_list
get_queryset()函数的作用是什么?
它创建传递给模板的查询。
答案 1 :(得分:0)
我理解他们的意思。
默认情况下, DetailView 通用视图使用名为 / _ detail.html的模板。在我的情况下,它会使用模板“polls / question_detail。 HTML“即可。 template_name 属性用于告诉Django使用特定模板名称而不是自动生成的默认模板名称。我还为结果列表视图指定了 template_name - 这可以确保结果视图和详细视图在渲染时具有不同的外观,即使它们都是<幕后的strong> DetailView 。
对于 DetailView ,问题变量是自动提供的 - 因为我们使用的是Django模型(问题),Django能够为上下文变量确定一个合适的名称。但是,对于 ListView ,自动生成的上下文变量为 question_list 。要覆盖此项,我们提供 context_object_name 属性,指定我们要使用 latest_question_list 。