2010-02-02 19 views

risposta

10

Non esiste alcun tag o filtro incorporato per effettuare questa sostituzione. Scrivi un filtro che si divide per un dato carattere, quindi uniscilo con il filtro join o scrivi un filtro che sostituisce direttamente.

+2

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

+0

Sembra che non sia possibile utilizzare filtri personalizzati con un'inclusione, qualche idea? – dotty

+3

note toself: user {% load%} again! – dotty

4

se non vi piace scrivere il proprio tag personalizzato che si possa fare in questo modo ...

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

Tuttavia è abbastanza prolisso ...

6

mi piace per eseguire questo tipo di conversioni in mio avviso/codice del controller cioè:

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

Non abbiate paura di aggiungere solo una nuova (temporanea) di proprietà e utilizzare questo nel modello:

{{ user.underscored_name }} 

Se si utilizza questo in più luoghi Aggiungere il metodo underscored_name al modello User:

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

Questo funziona fintanto che l'attributo non viene chiamato da una pagina hjml django. Consigliare l'impostazione di un campo 'self.underscored_name' nella classe. +1 in ogni caso perché mi ha aiutato a risolvere un problema. – IAbstract

73

Una versione più breve di Matthijs' risposta:

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

Naturalmente funziona solo quando dividersi su spazi bianchi.

+0

Perfetto! Proprio quello di cui avevo bisogno! –

+2

Mi piacciono le versioni più brevi. – Gnijuohz

+2

WOW! come mi sono perso? – Matthijs