如果块没有在模板中被评估

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_listcontext_object_name attribute [Django-doc] 中指定的名称传递给模板。如果您不指定此类属性,它将使用 <i>modelname</i>_list.