如何在显示值时替换django中的字符串

时间:2014-03-19 13:40:37

标签: django

我需要改变任何'到了在我的模板中显示值时。

所以例如{{account.company_name | escapejs}}应该替换任何'用\'

我该怎么做?

感谢 托马斯

**基于以下评论的更新代码**

我的目录结构是这样的:

myapp/
  ....
  templatetags/
     __init__.py
     replace.py

Replace.py包含:

from django import template
register = template.Library()
from django.template import defaultfilters

@register.filter
@defaultfilters.stringfilter
def replace(value, args=","):
    try:
        old, new = args.split(',')
        return value.replace(old, new)
    except ValueError:
        return value

在settings.py中我有

INSTALLED_APPS = ( 'myapp' )

在我的模板中,我尝试加载自定义标签:

{% from replace load replace %}

并且像这样使用

company_name='{{ account.company_name|escapejs|replace:"',\'" }}'

然后我收到了这个错误:

TemplateSyntaxError: Invalid block tag: 'from'

然后改为

{% load replace %} instead of {% from replace load replace %}

然后我收到了这个错误:

TemplateSyntaxError: 'replace' is not a valid tag library: Template library replace not found, tried google.appengine._internal.django.templatetags.replace

感谢任何帮助

2 个答案:

答案 0 :(得分:0)

您可以编写自己的过滤器:

@register.filter
@defaultfilters.stringfilter
def replace(value, args=","):
    try:
        old, new = args.split(',')
        return value.replace(old, new)
    except ValueError:
        return value

然后在你的模板中:

{% load replace from mycustomtags %}

{{ account.company_name|escapejs|replace:"',\'" }}

(我还没有测试过)

答案 1 :(得分:0)

使用addslashes内置过滤器:

来自文档示例

{{ value|addslashes }}

如果值为"I'm using Django",则输出为"I\'m using Django"