2010-02-02 155 views

回答

10

没有内置的标签或过滤器来做这个替换。编写一个按给定字符分割的过滤器,然后将其与join过滤器结合使用,或者编写一个直接进行替换的过滤器。

+2

http://docs.djangoproject.com/en/dev/howto/custom-template-tags/ – jcdyer 2010-02-02 15:34:37

+0

似乎我不能使用自定义过滤器与包含,任何想法? – dotty 2010-02-02 15:53:02

+3

重新注意:用户{%load%}! – dotty 2010-02-02 16:03:38

4

如果你不喜欢写自己的自定义标签,你可以做这样的......

{% for word in user.name.split %}{{word}}{% if not forloop.last %}_{% endif %}{% endfor %} 

但是它非常详细...

6

我喜欢在执行这种类型的转换我的看法/控制器代码,即:

user.underscored_name = user.name.replace(' ','_') 
context['user'] = user 

不要害怕只需添加一个新的(临时)财产,在您的模板使用:

{{ user.underscored_name }} 

如果你使用这个在更多的地方的方法underscored_name添加到用户模式:

class User() 
    def underscored_name(self): 
    return self.name.replace(' ','_') 
+0

只要该属性不被django html页面调用,它就会工作。推荐在该类中设置一个'self.underscored_name'字段。无论如何,因为它帮助我解决了一个问题。 – IAbstract 2014-08-27 20:52:42

73

一个较短的版本Matthijs'回答:

{{ user.name.split|join:"_" }} 

当然它只能当按空白分割。

+0

完美!正是我需要的! – 2012-06-19 19:12:22

+2

我喜欢较短的版本。 – Gnijuohz 2012-09-23 14:31:42

+2

哇!我怎么错过了? – Matthijs 2014-01-30 22:51:09