2010-02-02 2 views

Répondre

10

Il n'y a pas d'étiquette ou de filtre intégré pour effectuer ce remplacement. Ecrivez un filtre qui se divise par un caractère donné, puis combinez-le avec le filtre join, ou écrivez un filtre qui effectue le remplacement directement.

+2

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

+0

Semble que je ne peux pas utiliser des filtres personnalisés avec une inclusion, des idées? – dotty

+3

note toself: utilisateur {% load%} à nouveau! – dotty

4

Si vous n'aimez pas écrire votre propre étiquette personnalisée, vous pouvez le faire comme ça ...

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

Cependant son assez bavard ...

6

J'aime effectuer ce type de conversions moi/code du contrôleur à savoir:

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

Ne pas avoir peur d'ajouter simplement un nouveau (temporaire) la propriété et l'utiliser dans votre modèle:

{{ user.underscored_name }} 

Si vous utilisez ce à plus d'endroits ajouter la méthode underscored_name au modèle de l'utilisateur:

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

Cela fonctionne tant que l'attribut n'est pas appelé par une page django html. Recommandez de définir un champ 'self.underscored_name' dans la classe. +1 de toute façon parce que ça m'a aidé à résoudre un problème. – IAbstract

73

Une version plus courte de la réponse de Matthijs:

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

Bien sûr, il ne fonctionne que lorsque fractionnement sur les espaces.

+0

Parfait! Juste ce dont j'avais besoin! –

+2

J'aime les versions plus courtes. – Gnijuohz

+2

WOW! comment ai-je manqué ça? – Matthijs

Questions connexes