Django模板 - 迭代范围

时间:2012-01-12 10:26:16

标签: python django django-templates

意图

在我的Django模板中,我为字母表中的每个字母创建一个链接,每个数字1-9链接到索引页面。

在Python代码中,这就是它的样子:

for ch in map(chr, range(97, 123)) + range(1,10):
    print '<a href="/indexpage/{0}/">{0}</a>'.format(ch)

但是我想在Django模板中这样做,所以我不能直接使用map / range函数。

尝试失败

首先,我考虑创建一个返回字母数字字符列表的模板标记,然后在模板中循环它,但这不起作用,因为它是标记而不是上下文变量。

Templatetag:

@register.simple_tag
def alnumrange():
    return map(chr, range(97, 123)) + range(1,10)

模板:

{% for ch in alnumrange %}
    <a href="/indexpage/{{ch}}/">{{ch}}</a>
{% endfor %}

我认为在使用with标记时可能会有效,但它也没有。

进一步的想法

  • 我无法在视图中设置上下文,因为这是我扩展的基本模板。
  • 我不想添加上下文处理器,因为我只在一个模板中使用此范围。

有没有办法将模板标签输出转换为我可以迭代的上下文变量?或者我还有另一种解决方法吗?

3 个答案:

答案 0 :(得分:3)

查看此模板标记:Template range tag。您应该能够扩展它以处理字符。

答案 1 :(得分:2)

您需要inclusion tag。只需在上下文中传递您的范围并根据需要进行渲染。它为您提供灵活的模块化结构。

答案 2 :(得分:0)

您可以将 模板 作为流程循环,它会执行该任务 100 次..

{% for item in "x"|ljust:"100" %}
    {{item}} 
{% endfor %}

或作为 int,您可以:

{% for item in "x"|ljust:100 %}
    {{item}} 
{% endfor %}