Django 模板中添加过滤器未按预期工作
我是一名刚接触Django和Python的新手,在使用Django的时候遇到了一个问题。我希望在模板中使用一个过滤器来获取我需要的字符串,但下面的结果并不是我预期的。
# filter definition
@register.filter
def to_class_name(obj):
return obj.__class__.__name__
# HTML template for UpdateView (This template will be used by multiple models.)
# object = Order()
{{ object|to_class_name }} #reulst: Order
{{ 'wms'|add:object|to_class_name }} #result: str, expect: object
我大致明白问题出在顺序上,但我似乎无法添加括号来修改它。
{{ 'wms'|add:(object|to_class_name) }} #cause SyntaxError
有没有什么办法可以解决这个问题?或者在多个模型共享一个模板的情况下,有没有更好的方法来确定我需要输出的页面数据?谢谢大家。
1 个回答
0
我大概明白问题出在顺序上,但似乎我无法添加括号来修改它。
你可以使用变量。链接
一种方法是使用 with
标签。
它可以把一个复杂的变量用一个简单的名字来缓存。这个变量在
{% endwith %}
标签出现之前都是可以用的。
例如:
{% with firstname="Tobias" %}
<h1>Hello {{ firstname }}, how are you?</h1>
{% endwith %}
在你的情况下,可以这样做:
{% with class_name=object|to_class_name %}
{{ 'wms'|add:class_name }}
{% endwith %}
另一种方法是使用 firstof
标签。链接
{% firstof object|to_class_name as class_name %}
{{ 'wms'|add:class_name }}