如果块没有在模板中被评估
If block not being evaluated in templates
我正在尝试使用 ListView 呈现项目列表,如下所示:
views.py
class EventView(generic.ListView):
model = Event
template_name = 'timer/index.html'
def get_queryset(self):
events = Event.objects.order_by('-day')[:7]
return events
events
然后像这样传递给 index.html:
index.html
{% block content %}
{% if events %}
<ul>
{% for event in events %}
<li><a href="{% url 'timer:detail' event.id %}"></a>>{{ event }}</a></li>
{% endfor %}
</ul>
{% else %}
No events to show
{% endif %}
{% endblock %}
挑战在于总是返回 else 块。
我确保我的数据库中有对象并且它们永远不会被返回。我做错了什么?
您需要指定上下文对象的名称,因此:
class 事件视图(generic.ListView):
模型 = 事件
template_name = 'timer/index.html'
queryset = Event.objects.order_by('-day')[:7]
<b>context_object_name = 'events'</b>
在get_queryset
中使用什么变量名并不重要。它作为 object_list
和 context_object_name
attribute [Django-doc] 中指定的名称传递给模板。如果您不指定此类属性,它将使用 <i>modelname</i>_list
.
我正在尝试使用 ListView 呈现项目列表,如下所示:
views.py
class EventView(generic.ListView):
model = Event
template_name = 'timer/index.html'
def get_queryset(self):
events = Event.objects.order_by('-day')[:7]
return events
events
然后像这样传递给 index.html:
index.html
{% block content %}
{% if events %}
<ul>
{% for event in events %}
<li><a href="{% url 'timer:detail' event.id %}"></a>>{{ event }}</a></li>
{% endfor %}
</ul>
{% else %}
No events to show
{% endif %}
{% endblock %}
挑战在于总是返回 else 块。
我确保我的数据库中有对象并且它们永远不会被返回。我做错了什么?
您需要指定上下文对象的名称,因此:
class 事件视图(generic.ListView):
模型 = 事件
template_name = 'timer/index.html'
queryset = Event.objects.order_by('-day')[:7]
<b>context_object_name = 'events'</b>
在get_queryset
中使用什么变量名并不重要。它作为 object_list
和 context_object_name
attribute [Django-doc] 中指定的名称传递给模板。如果您不指定此类属性,它将使用 <i>modelname</i>_list
.