Django 模板中添加过滤器未按预期工作

0 投票
1 回答
33 浏览
提问于 2025-04-12 08:32

我是一名刚接触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 }}

撰写回答