我有一个模型字段,它存储一个URL列表(是的,我知道,这是错误的方式)url1\nurl2\nurl3<...>。我需要将字段拆分为模板中的数组,因此创建了自定义过滤器:
url1\nurl2\nurl3<...>
@register.filter(name='split') def split(value, arg): return value.split(arg)
我用这种方式:
{% with game.screenshots|split:"\n" as screens %} {% for screen in screens %} {{ screen }}<br> {% endfor %} {% endwith %}
但是正如我所看到的,split并不能正常工作:我得到类似的输出url1 url2 url3(如果查看源代码,则带有换行符)。为什么?
url1 url2 url3
Django有意排除了许多类型的templatetag,以阻止你对模板进行过多处理。(不幸的是,人们通常只是自己添加这些类型的模板标签。)
这是应该在模型中而不是模板中的完美示例。
class Game(models.Model): ... def screenshots_as_list(self): return self.screenshots.split('\n')
然后,在模板中,你只需执行以下操作:
{% for screen in game.screenshots_as_list %} {{ screen }}<br> {% endfor %}
更清晰,更容易使用。