2010-02-02 32 views

Respuesta

10

No hay una etiqueta o filtro incorporado para hacer esta sustitución. Escriba un filtro que se divida por un carácter determinado y luego combine eso con el filtro join, o escriba un filtro que haga el reemplazo directamente.

+2

http://docs.djangoproject.com/en/dev/howto/custom-template-tags/ – jcdyer

+0

Parece que no puedo usar filtros personalizados con una inclusión, ¿alguna idea? – dotty

+3

nota por si mismo: usuario {% load%} otra vez! – dotty

4

si no te gusta para escribir su propia etiqueta personalizada que podría hacerlo de esta manera ...

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

Sin embargo es bastante detallado ...

6

me gusta para llevar a cabo este tipo de conversiones en mi punto de vista/código del controlador es decir:

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

No tenga miedo de simplemente añadir un nuevo (temporal) propiedad y utilizar esto en su plantilla:

{{ user.underscored_name }} 

Si utiliza esto en más lugares añadir el método underscored_name al modelo de usuario:

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

Esto funciona mientras el atributo no sea llamado por una página django html. Recomendamos establecer un campo 'self.underscored_name' en la clase. +1 de todos modos porque me ayudó a resolver un problema. – IAbstract

73

Una versión más corta de Matthijs' respuesta:

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

Por supuesto que sólo funciona cuando dividir en espacios en blanco.

+0

¡Perfecto! ¡Justo lo que necesitaba! –

+2

Me gustan las versiones más cortas. – Gnijuohz

+2

¡WOW! ¿Cómo extrañé eso? – Matthijs