2014-01-31 68 views
3

我想在我的页面元描述中将&更改为and替换Django模板中的字符

这是我试过

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

这是行不通的。它仍然显示为&

回答

10

dj.name.replace('&', 'and') 您无法使用参数调用方法。您需要编写自定义过滤器。

官方指南是在这里:

https://docs.djangoproject.com/en/1.9/howto/custom-template-tags/#registering-custom-filters

好吧,这里是我的例子,比如说,在一个名为“问题”,我想写一个过滤器to_and它取代“&”到“应用程序和'在一个字符串中。

在/ PROJECT_NAME /问题/ 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

我想这会更好,如果你写一个示例过滤器。 – FallenAngel

+0

@FallenAngel它来... – tcpiper

+0

这将是更好,如果你的例子地址'&»和'替换。既然它会完全回答OP的问题。 – FallenAngel

1

documentation说:

由于Django的有意限制了模板语言可用逻辑的处理量,这是不可能的参数传递给从模板内访问的方法调用。数据应该在视图中计算,然后传递给模板进行显示。

您必须事先编辑dj.name

编辑:看起来像Pythoner知道更好的方法:registering a custom filter。 upvote他;)