10
votes

Comment accéder aux clés de dictionnaire contenant des traits d'union à partir d'un modèle Django?

Nous avons un système construit sur une base de données personnalisée, où de nombreux attributs sont nommés contenant des traits d'union, c'est-à-dire:

{{ user-name }}


0 commentaires

3 Réponses :


5
votes

Malheureusement, je pense que vous pourriez avoir du mal de la chance. De Docs :

Les noms de variables doivent être constitués de n'importe quelle lettre (A-Z), n'importe quel chiffre (0-9), un souligné ou un point.


1 commentaires

Droit. J'ai aussi trouvé une question similaire: Stackoverflow.com/Questtions/2213308/...



8
votes

Une étiquette de modèle personnalisée est probablement la seule façon d'aller ici si vous ne voulez pas restructurer vos objets. Pour accéder aux dictionnaires avec une clé de chaîne arbitraire, la réponse à Cette question fournit un bon exemple.

pour le paresseux: p> xxx pré>

que vous utilisez comme" p> xxx

Si vous souhaitez accéder à un attribut d'un objet avec un nom de chaîne arbitraire, vous pouvez utiliser les éléments suivants: p> xxx pré>

que vous utiliseriez comme: p >

{% attributeLookup your_object_passed_into_context "phone-number" %}


2 commentaires

J'ai utilisé cette solution, mais j'ai changé d'une étiquette à un filtre. Ça marche bien, merci!


Cela fonctionne définitivement, mais comment accéderiez-vous une clé qui se trouvait à l'intérieur d'un dict contenant un dict comme valeur?



-1
votes

CommandéDict Types de dictionnaire Supporte les tirets: https://docs.python.org/2/Library/collections. HTML # OrderedDict-Objects

Cela semble être un effet secondaire de la mise en œuvre de commandesDict. Avis ci-dessous que les paires de la valeur clé sont réellement transmises sous forme de jeux. Je parierais que la mise en œuvre de commandesDict n'utilise pas la "clé" transmise dans la définie comme une vraie clé dict qui se déplace donc autour de ce problème.

Comme il s'agit d'un effet secondaire de la mise en œuvre de commandesDict, ce n'est peut-être pas quelque chose que vous souhaitez compter sur. Mais cela fonctionne. xxx

résultat: xxx


0 commentaires