1

我定义了这个简单的标签并将其加载到我的模板中:

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 有点陌生,所以我试图避免更复杂的方法,谢谢。

4

1 回答 1

0

我对 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: {{ var }}</p>
于 2021-06-28T19:32:53.437 回答