Bonjour,
j'ai une page avec un formulaire qui a des champs textes générés dynamiquement. Leur nom l'est aussi.
Quand ma view retourne sur la page, elle transmet un dictionnaire contenant {'nomchamp':'valeur'} dans la methode render_to_response
Sauf que voilà, je n'arrive pas depuis ma page web à voir le contenu de mon dictionnaire :
value="{{ champs[user.keyword] }}"
(ici keyword vaut plouf par exemple)
ne marche pas.
Django veut que je passe par
value="{{ champs.plouf }}"
Sauf que je ne peux pas faire comme ca, vu que mon champ de dictionnaire n'est pas connu à l'avance !
(Django, je m'y met, c'est sympa, mais quand on est dans les pages web, c'est plus vraiment du python, ya plein de trucs qui changent)
Bref, je veux bien un peu d'aide...
Merci
# Erf..
Posté par cho7 (site web personnel) . Évalué à 1.
{% with foo as user.keyword %}
value="{{champs.plouf}}"
Manque de pot, le mot clé with n'est pas dispo dans ma version de django...
# Je comprend pas très bien
Posté par Henry-Nicolas Tourneur (site web personnel) . Évalué à 2.
Qu'est-ce qui t'empêche de faire :
{% for key,value in dictionnary.items %}
{{ key }} {# Ceci est le nom champ #}
{{ value }} {# Ceci est la valeur #}
{% endfor %}
Mais j'ai l'impression de pas avoir capté un truc...
[^] # Re: Je comprend pas très bien
Posté par cho7 (site web personnel) . Évalué à 1.
En gros donc, une boucle génère du code HTML, et dans cette boucle une partie du code est tirée d'un dictionnaire, auquel on accède via une clé dynamique, puisque liée à l'itération courante.
J'avais essayé un truc basé sur l'itération (ce que tu proposes), mais pour une raison que j'ignore, chez moi key et value sont toujours vides (Django version 0.96.2), bien qu'il boucle pourtant autant de fois qu'il y a d'éléments....
[^] # Re: Je comprend pas très bien
Posté par Henry-Nicolas Tourneur (site web personnel) . Évalué à 3.
En gros ça donnerai;
{% load filters %}
{% for var in list %}
{{ dictionnary | get : var}}
{% endfor %}
filters.py :
from django import template
register = template.Library()
@register.filter()
def get(dict, index):
return dict[index]
Attention, n'oublie pas de modifier INSTALLED_APPS dans settings.py pour ajouter le filtre. Pour ce faire il faut spécifier un nom de répertoire qui contiendra lui même un répertoire templatetags qui lui sera parcourut pour inclure des filtres.
Enfin, en tout cas tu doit pouvoir gratter dans cette direction.
Et aussi, n'hésite pas à poser la question sur #django et sur la mailing list Django tu aura des avis certainement plus éclairés que le mien.
[^] # Re: Je comprend pas très bien
Posté par cho7 (site web personnel) . Évalué à 1.
Je viens dans tous les cas d'installer django SNV (0.97) car après pour le chapitre des Forms j'ai vu qu'il y avait aussi plein de changement par rapport à la 0.96, donc ça me gave... J'vais pas apprendre des trucs qui seront obsolètes dans 1 mois ou 2 !
Sinon, j'commence à m'y faire à ce langage de templates django... C'est pas du python, mais c'est vrai qu'à l'usage c'est parfois plus concis...
Parcontre {% et %} c'est relou, on peut pas changer ça par des touches moins alambiquées (càd sans utiliser <alt gr>) ?
[^] # Re: Je comprend pas très bien
Posté par Henry-Nicolas Tourneur (site web personnel) . Évalué à 2.
En gros tu peut définir des filtres dans Django (comme celui ci-dessus) et des Tags (plus complexe) mais en tout cas le parser part du principe que :
{{ var }} -> ça c'est une variable
{{ var | filter }} -> variable à laquelle on applique un filtre
{% action %} -> un tag : une action a effectué
{# comment #} -> commentaire Django, non retourné dans l'HTML
Le problème c'est que il risque d'y avoir des trucs cassés si on change {%, comme par exemple l'interface d'admin auto générée.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.