【问题标题】:If block not being evaluated in templates如果没有在模板中评估块
【发布时间】:2021-07-01 04:10:36
【问题描述】:

我正在尝试使用 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 块。

我确保我的数据库中有对象并且它们永远不会被返回。我做错了什么?

【问题讨论】:

    标签: django django-templates django-class-based-views


    【解决方案1】:

    你需要指定上下文对象的名称,所以:

    class EventView(generic.ListView):
        model = Event
        template_name = 'timer/index.html'
        queryset = Event.objects.order_by('-day')[:7]
        context_object_name = 'events'

    在get_queryset 中使用什么变量名并不重要。它以object_list 和context_object_name attribute [Django-doc] 中指定的名称传递给模板。如果不指定该属性,它将使用<i>modelname</i>_list。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-10
      • 2015-04-12
      • 2020-08-12
      • 2011-01-17
      • 2015-01-18
      相关资源
      最近更新 更多