替换Django模板中的字符

时间:2014-01-31 14:54:44

标签: python django django-templates

我想在我的网页元描述中将&更改为and

这就是我试过的

{% if '&' in dj.name %}
    {{ dj.name.replace('&', 'and') }}
{% else %}
    {{ dj.name }}
{% endif %}

这不起作用。它仍显示为&

3 个答案:

答案 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__.pyto_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)