Django 模板 - 遍历范围

1 投票
2 回答
9922 浏览
提问于 2025-04-17 10:05

意图

在我的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这些函数。

失败的尝试

一开始,我考虑创建一个模板标签,返回字母和数字的列表,然后在模板中循环使用这个列表,但这样不行,因为这是一个标签,而不是上下文变量。

模板标签:

@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标签,结果也不行。

进一步思考

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

有没有办法把模板标签的输出变成一个可以循环的上下文变量?或者我应该用其他方法来解决这个问题?

2 个回答

3

看看这个模板标签:模板范围标签。你应该可以扩展它,让它也能处理字符。

2

你需要用到包含标签。只要把你的范围放到上下文中,然后按照你喜欢的方式来显示就可以了。这样可以让你的结构更加灵活和模块化。

撰写回答