在模板中留下 FOR 标记后,简单标记丢失设置的值
Posted
技术标签:
【中文标题】在模板中留下 FOR 标记后,简单标记丢失设置的值【英文标题】:Simple tag loosing the value set after leaving a FOR tag in template 【发布时间】:2021-09-11 02:13:15 【问题描述】:我定义了这个简单的标签并将其加载到我的模板中:
from django import template
@register.simple_tag
def defining(val=None):
return val
标签有效!
我的目标是,我想使用某个条件在 FOR 循环中使用这个简单的标签为变量设置一个值,然后在离开 FOR 后检查这个变量的值。简单吧?
% defining 'negative' as var %
% for anything in some_query_set %
% if 1 == 1 %
% defining 'positive' as var %
% endif %
% endfor %
<p>The value of var is: var</p>
问题是:我希望这个变量'var'在离开for之后是'正',但它总是变成'负'。 我在 IF 和 FOR 内部检查了它的值,它按预期变为“正”,但在离开 FOR 后,它又回到“负”。
我可能有一些通过视图使用上下文变量的解决方法,但我确实需要在模板中执行此操作。我也搜索了论坛,但我找不到足够接近的东西来解释为什么会发生这种情况。我错过了什么吗?
我对 Django 有点陌生,所以我尽量避免使用更复杂的方法,谢谢。
【问题讨论】:
拜托不要在模板中写业务逻辑,这属于视图。 这里顺便看一下some_query_set
有没有什么项目,可以优雅的处理一下。
【参考方案1】:
我对 Django 有点陌生,所以我尽量避免使用更复杂的方法,谢谢。
请不要在模板中这样做。模板应该专注于呈现逻辑,而不是业务逻辑。因此,这意味着视图应该以可访问的格式“准备”数据,并且模板不应该做更多的事情,而不仅仅是迭代数据和呈现这些数据。 Django 的模板语言刻意限制,防止人们编写业务逻辑。
在你看来,你可以简单地写:
from django.shortcuts import render
def my_view(request):
some_query_set = …
contains_items = bool(some_query_set)
context =
'some_query_set': some_query_set,
'var': contains_item
return render(request, 'some-template.html', context)
然后可以用以下方式渲染它:
<p>The value of var is: <b>var</b> </p>
【讨论】:
以上是关于在模板中留下 FOR 标记后,简单标记丢失设置的值的主要内容,如果未能解决你的问题,请参考以下文章
Python/Django - 在 for 标记中获取 ManyToManyField 的值
sh 从Container Registry中删除所有未标记的容器图像,只留下最新的标记