Python 上下文值似乎没有传递到Django中的ListView?
我正在学习Django 1.7教程。 我从web复制了代码,然后运行它。我遇到两个问题:Python 上下文值似乎没有传递到Django中的ListView?,python,django,Python,Django,我正在学习Django 1.7教程。 我从web复制了代码,然后运行它。我遇到两个问题: 添加继承ListView的IndexView后,127.0.0.1:8000/polls页面只返回“无可用的轮询”,而不返回任何数据库项。我对基于类的视图感到困惑,似乎上下文值没有传递给模板。 ------------->解决了,这是我愚蠢的打字错误。 get_queryset(),用于什么,当调用此方法时,此方法如何映射到上下文?这个函数如何知道上下文映射,如果有两个上下文和两个值呢 有人能给我一些指导吗
from django.conf.urls import patterns, url
from . import views
urlpatterns = patterns('',
url(r'^$', views.IndexView.as_view(), name='index'),
#url(r'^$', views.index, name='index'), #this url works
url(r'^(?P<pk>\d+)/$', views.DetailView.as_view(), name='detail'),
url(r'^(?P<pk>\d+)/results/$', views.ResultsView.as_view(), name='results'),
url(r'^(?P<question_id>\d+)/vote/$', views.vote, name='vote'),
)
polls/index.html
{% if latest_question_list %} <!-- seems here value is not passed by -->
<ul>
{% for question in latest_question_list %}
<li>
{{ question.question_text }}</li>
{% endfor %}
</ul>
{% else %}
<p>{{ latest_question_list }}</p>
<p>No polls are available.</p> <!-- always display this -->
<p>{{ latest_question_list }}</p>
{% endif %}
{%if最新问题列表%}
{最新问题列表%中的问题%
-
{{question.question_text}
{%endfor%}
{%else%}
{{最新问题列表}
没有可用的投票。
{{最新问题列表}
{%endif%}
数据库
>>> from polls.models import Question
>>> Question.objects.all()
[<Question: What's up?>, <Question: tttt>]
>>来自polls.models导入问题
>>>问题.对象.全部()
[P>既然Django是开源的,就可以通过代码> > CONTXEXObjistNo.<代码>变量来确定“代码> QueReSET/<代码>如何在模板中可用。
调用get
方法时,Django使用get\u queryset()
初始化self.object\u list
。然后,它调用get\u context\u data()
并将上下文数据传递给模板
MultipleObjectMixin.get\u context\u data
返回一个包含name->variable
对的字典。它创建一个对get\u context\u object\u name()<代码> > ObjistaList,这就是为什么您可以使用定义的<代码> CONTXEXObjistNo.<代码> No.< /P> < P>访问您的列表,因为Django是开源的,可以通过代码> > CONTXEXObjistNo.<代码>变量来确定“代码> QueReSET/<代码>如何在模板中可用。/p>
调用get
方法时,Django使用get\u queryset()
初始化self.object\u list
。然后,它调用get\u context\u data()
并将上下文数据传递给模板
MultipleObjectMixin.get\u context\u data
返回一个包含name->variable
对的字典。它创建一个对get\u context\u object\u name()<代码> > ObjistaList,这就是为什么您可以使用定义的<代码> CONTXEXObjistNo.<代码> No.< /P> < P>访问您的列表,因为Django是开源的,可以通过代码> > CONTXEXObjistNo.<代码>变量来确定“代码> QueReSET/<代码>如何在模板中可用。/p>
调用get
方法时,Django使用get\u queryset()
初始化self.object\u list
。然后,它调用get\u context\u data()
并将上下文数据传递给模板
MultipleObjectMixin.get\u context\u data
返回一个包含name->variable
对的字典。它创建一个对get\u context\u object\u name()<代码> > ObjistaList,这就是为什么您可以使用定义的<代码> CONTXEXObjistNo.<代码> No.< /P> < P>访问您的列表,因为Django是开源的,可以通过代码> > CONTXEXObjistNo.<代码>变量来确定“代码> QueReSET/<代码>如何在模板中可用。/p>
调用get
方法时,Django使用get\u queryset()
初始化self.object\u list
。然后,它调用get\u context\u data()
并将上下文数据传递给模板
MultipleObjectMixin.get\u context\u data
返回一个包含name->variable
对的字典。它创建一个对get\u context\u object\u name()
->object\u list
,这就是为什么您可以使用定义的context\u object\u name
name来访问列表。基于类的视图通过提供大量预烘焙的代码,使开发人员的任务变得更加容易。ListView
用于返回对象列表。ListView与所有其他视图一样,是从扩展而来的View
View
实现了一个get\u context\u data
方法,该方法传递要在模板中使用的数据。因此,现在如果检查ListView的get\u context\u data
方法,我们会发现:
def get_context_data(self, **kwargs):
"""
Get the context for this view.
"""
queryset = kwargs.pop('object_list', self.object_list)
page_size = self.get_paginate_by(queryset)
context_object_name = self.get_context_object_name(queryset)
if page_size:
paginator, page, queryset, is_paginated = self.paginate_queryset(queryset, page_size)
context = {
'paginator': paginator,
'page_obj': page,
'is_paginated': is_paginated,
'object_list': queryset
}
else:
context = {
'paginator': None,
'page_obj': None,
'is_paginated': False,
'object_list': queryset
}
if context_object_name is not None:
context[context_object_name] = queryset
context.update(kwargs)
return super(MultipleObjectMixin, self).get_context_data(**context)
如您所见,object_list设置为queryset,或者如果您提供了context_object_name,则将其设置为queryset。queryset由您定义的get_queryset
设置
我希望这能使过程变得清晰。基于类的视图通过提供大量预烘焙的代码,使开发人员的任务变得更加容易。列表视图
用于返回对象列表。列表视图与所有其他视图一样,是从视图
视图
扩展而来的,它实现了一个获取上下文数据
的方法,即p评估模板中要使用的数据。因此,现在如果检查ListView的get\u context\u data
方法,我们会发现:
def get_context_data(self, **kwargs):
"""
Get the context for this view.
"""
queryset = kwargs.pop('object_list', self.object_list)
page_size = self.get_paginate_by(queryset)
context_object_name = self.get_context_object_name(queryset)
if page_size:
paginator, page, queryset, is_paginated = self.paginate_queryset(queryset, page_size)
context = {
'paginator': paginator,
'page_obj': page,
'is_paginated': is_paginated,
'object_list': queryset
}
else:
context = {
'paginator': None,
'page_obj': None,
'is_paginated': False,
'object_list': queryset
}
if context_object_name is not None:
context[context_object_name] = queryset
context.update(kwargs)
return super(MultipleObjectMixin, self).get_context_data(**context)
如您所见,object_list设置为queryset,或者如果您提供了context_object_name,则将其设置为queryset。queryset由您定义的get_queryset
设置
我希望这能使过程变得清晰。基于类的视图通过提供大量预烘焙的代码,使开发人员的任务变得更加容易。列表视图
用于返回对象列表。列表视图与所有其他视图一样,是从视图
视图
扩展而来的,它实现了一个获取上下文数据
的方法,即p评估模板中要使用的数据。因此,现在如果检查get\u context\u data
def get_context_data(self, **kwargs):
"""
Get the context for this view.
"""
queryset = kwargs.pop('object_list', self.object_list)
page_size = self.get_paginate_by(queryset)
context_object_name = self.get_context_object_name(queryset)
if page_size:
paginator, page, queryset, is_paginated = self.paginate_queryset(queryset, page_size)
context = {
'paginator': paginator,
'page_obj': page,
'is_paginated': is_paginated,
'object_list': queryset
}
else:
context = {
'paginator': None,
'page_obj': None,
'is_paginated': False,
'object_list': queryset
}
if context_object_name is not None:
context[context_object_name] = queryset
context.update(kwargs)
return super(MultipleObjectMixin, self).get_context_data(**context)