是否可以在 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 语句的主要内容,如果未能解决你的问题,请参考以下文章