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

问题描述 投票:0回答:1

我是 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

有什么办法可以解决这个问题吗?或者当多个模型共享一个模板时,有没有更好的方法来根据模型类来确定我需要输出的页面数据?谢谢大家。

python django django-models django-templates django-filter
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 }}
© www.soinside.com 2019 - 2024. All rights reserved.