是否可以在Django模板中嵌入for循环中的if语句

时间:2014-03-19 12:59:21

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

我将2个上下文变量{{ year_list }}{{ current_year }}传递到django模板中。我正在遍历{{ year_list }}并检查{{ current_year }}中是否有{{ year_list }}

{% each_year in year_list %}
  {% if each_year == current_year %}
   <li class="active"><a href="{{ each_year }}">{{ each_year }}</a></li>
  {% else %}
   <li><a href="{{ each_year }}">{{ each_year }}</a></li>
  {% endif %}

它似乎不起作用。列表项都没有class='active'。但是当我在{{ each_year }}

之后放{{ current_year }}{% each_year in year_list %}时,它会打印正确的值

我实际上正在使用基于班级的视图YearArchiveView,我希望有一个年份列表,并在当前年份点亮。

class SomeYearArchiveView(YearArchiveView):
    queryset = Some.objects.all()
    date_field = 'some_date'
    make_object_list = True

    def get_context_data(self, **kwargs):
        context = super(SomeYearArchiveView, self).get_context_data(**kwargs)
        context['year_list'] = [2010, 2011, 2012]
        context['current_year'] = self.request.path.split("/")[2]
        return context

我做错了什么?有更好的方法吗?

1 个答案:

答案 0 :(得分:3)

在功能get_context_data -

context['year_list'] = [2010, 2011, 2012]
context['current_year'] = self.request.path.split("/")[2]

year_list值为integer,而current_year值为string。这就是他们在模板中不匹配的原因。在您的代码中执行此操作 -

context['current_year'] = int(self.request.path.split("/")[2])

这应该有效