2014-04-30 3 views
2

Je reçois 3 variables rendues au modèle qui doivent être affichées côte à côte avec des espaces entre elles si elles existent. J'ai essayé:Django - variables dans le modèle sans espace

"{{v1|default:''}} {{v2|default:''}} {{v3|default:''}}" 

Mais si v1 existe doesnot, j'ai " v2_value v3_value". Ce dont j'ai besoin est toujours: "any_value any_value" ce qui signifie - sans aucun espace sur les parties de début et de fin. Comment puis-je atteindre cet objectif?

Je pourrais faire toutes les permutations possibles, mais j'espère, il y a une manière plus élégante de faire ceci ?!

Répondre

1

Vous avez deux options. Tout d'abord, vous pouvez passer le modèle une liste au lieu des trois variables distinctes et utilisation:

{{yourlist|join:" "}} 

Mais je n'aime pas cette approche, parce que vous auriez à créer la liste dans la vue, c'est en désordre.

La deuxième et meilleure option consisterait à créer une étiquette de modèle personnalisée. Par exemple, créez un module templatetags dans votre application et créez un fichier appelé main_extras.py. Ajoutez le code suivant:

from django import template 

register = template.Library() 

@register.simple_tag 
def join_vars(*args, **kwargs): 
    separator = kwargs['separator'] 
    return separator.join(str(x) for x in args) 

Ensuite, dans votre modèle, vous pouvez l'utiliser comme ceci:

{% load main_extras %}  

<pre>"{% join_vars v1 v2 v3 separator="/" %}"</pre> 
+0

Belle! Merci mec. – doniyor

3

qu'en est-il du modèle ' '.join([v1, v2, v3]) en vue?

vous pouvez également utiliser join tag: list_of_values|join:' '

Création d'une liste de valeurs séparées est également posiible, mais nécessite étiquette cutsom. S'il vous plaît vérifier:

Questions connexes