int*_*_32 39 django django-templates django-template-filters
我有一个模型字段,它存储一个URL列表(是的,我知道,这是错误的方式)url1\nurl2\nurl3<...>
.我需要将字段拆分为模板中的数组,因此我创建了自定义过滤器:
@register.filter(name='split')
def split(value, arg):
return value.split(arg)
Run Code Online (Sandbox Code Playgroud)
我用这种方式:
{% with game.screenshots|split:"\n" as screens %}
{% for screen in screens %}
{{ screen }}<br>
{% endfor %}
{% endwith %}
Run Code Online (Sandbox Code Playgroud)
但正如我所看到的,split不想工作:我得到的输出url1 url2 url3
(如果我查看源代码,则使用换行符).为什么?
Chr*_*att 69
Django故意遗漏了许多类型的模板标签,以阻止您在模板中进行太多处理.(不幸的是,人们通常只是自己添加这些类型的模板标签.)
这是一个完美的例子,应该在你的模型中,而不是你的模板.
class Game(models.Model):
...
def screenshots_as_list(self):
return self.screenshots.split('\n')
Run Code Online (Sandbox Code Playgroud)
然后,在您的模板中,您只需:
{% for screen in game.screenshots_as_list %}
{{ screen }}<br>
{% endfor %}
Run Code Online (Sandbox Code Playgroud)
更清晰,更容易使用.
pet*_*erp 13
功能已经存在linkebreaksbr
:
{{ value|linebreaksbr }}
Run Code Online (Sandbox Code Playgroud)
https://docs.djangoproject.com/en/dev/ref/templates/builtins/?from=olddocs#linebreaksbr
嗯,我已经部分解决了这个问题。我将过滤器更改为:
@register.filter(name='split')
def split(value, arg):
return value.split('\n')
Run Code Online (Sandbox Code Playgroud)
为什么它与原始代码不兼容?
归档时间: |
|
查看次数: |
64309 次 |
最近记录: |