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

Posted

技术标签:

【中文标题】是否可以在 Django 模板的 for 循环中嵌套 if 语句【英文标题】:Is it possible to nest if statement in for loop in Django template 【发布时间】:2014-04-25 17:50:36 【问题描述】:

我将 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】:

在函数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])

这应该可行

【讨论】:

是的。你说的对。我认为所有上下文变量在模板中呈现时都会转换为 string 或 repr() 。谢谢

以上是关于是否可以在 Django 模板的 for 循环中嵌套 if 语句的主要内容,如果未能解决你的问题,请参考以下文章

Django - 在模板的for循环中迭代数字

来自 % for % 的 Django 模板变量循环到 Javascript

循环模板的键值 - Django 查询

Django模板中的数字for循环

如何在 django 模板中从 for 循环中转义一行

Django、模板、for 循环和循环