我想在我的网页元描述中将&
更改为and
。
这就是我试过的
{% if '&' in dj.name %}
{{ dj.name.replace('&', 'and') }}
{% else %}
{{ dj.name }}
{% endif %}
这不起作用。它仍显示为&
答案 0 :(得分:20)
dj.name.replace('&', 'and')
您无法使用参数调用方法。您需要编写自定义过滤器。
官方指南在这里:
https://docs.djangoproject.com/en/1.9/howto/custom-template-tags/#registering-custom-filters
好的,这是我的例子,比如,在一个名为'questions'的应用中,我想写一个过滤器to_and
来取代'&'在一个字符串中'和'。
在/ project_name / questions / templatetags中,创建一个空白__init__.py
和to_and.py
,如下所示:
from django import template
register = template.Library()
@register.filter
def to_and(value):
return value.replace("&","and")
在模板中,使用:
{% load to_and %}
那么你可以享受:
{{ string|to_and }}
注意,目录名templatetags
和文件名to_and.py
不能是其他名称。
答案 1 :(得分:1)
documentation这样说:
由于Django故意限制模板语言中可用的逻辑处理量,因此无法将参数传递给从模板内访问的方法调用。数据应在视图中计算,然后传递给模板进行显示。
您必须事先编辑dj.name
。
编辑:看起来Pythoner知道更好的方法:registering a custom filter。向上投票;)
答案 2 :(得分:1)
更有用的东西:
from django import template
register = template.Library()
@register.filter
def replace(value, arg):
"""
Replacing filter
Use `{{ "aaa"|replace:"a|b" }}`
"""
if len(arg.split('|')) != 2:
return value
what, to = arg.split('|')
return value.replace(what, to)