【问题标题】:Iterate through list passed by custom template tag遍历自定义模板标签传递的列表
【发布时间】:2015-09-23 13:32:37
【问题描述】:

我有自定义模板标签:

@register.simple_tag
def random_num():
    numbers = range(1,18)
    shuffle(numbers)
    return numbers

在模板中:

{% for num in random_num  %}
    {{ num }}
{% endfor %}

什么都不给。 {% random_num %} 可以很好地打印整个列表,但我需要遍历所有元素。有什么问题?

【问题讨论】:

    标签: django list templates tags


    【解决方案1】:

    根据 Anentropic 的回答,在 Django 2.0 中您可以继续使用simple_tag,但您仍然必须使用as 子句。 assignment_tag 还有has been deprecated and removed from Django 2.0

    因此,您的标签可以是:

    @register.simple_tag
    def random_num():
        numbers = range(1,18)
        shuffle(numbers)
        return numbers
    

    在模板中你应该将其用作:

    {% random_num as numlist %}
    {% for num in numlist  %}
        {{ num }}
    {% endfor %}
    

    【讨论】:

      【解决方案2】:

      你不能使用模板标签作为变量,所以:

      {% for num in random_num  %}
      

      不能工作。

      您需要将您的模板标签更改为assignment tag

      @register.assignment_tag
      def random_num():
          numbers = range(1,18)
          shuffle(numbers)
          return numbers
      

      ...并在模板中使用as 子句:

      {% random_num as numlist %}
      {% for num in numlist  %}
          {{ num }}
      {% endfor %}
      
      猜你喜欢
      • 2017-05-29
      • 2014-03-04
      • 1970-01-01
      • 2015-02-03
      • 1970-01-01
      • 1970-01-01
      • 2021-09-04
      • 2014-05-13
      • 1970-01-01
      相关资源
      最近更新 更多