J'avais des difficultés à essayer d'itérer sur un gabarit sur deux dimensions en même temps.Spooky filtre de modèle personnalisé?
La situation de base est expliqué ici:
http://www.djangobook.com/en/2.0/chapter04/ (dans les pommes, les bananes indices exemple)
>>> from django.template import Template, Context
>>> t = Template('Item 2 is {{ items.2 }}.')
>>> c = Context({'items': ['apples', 'bananas', 'carrots']})
>>> t.render(c)
u'Item 2 is carrots.'
Si je voulais itérer de 1 à 3 sur ce point avec la variable "fruitstep", Je ne peux pas le faire dans un template:
{{items.fruitstep}} échoue et compte tenu des longues chaînes de points, ce concept conduirait à des exigences d'itérations massives sur le template. Mais je ne pouvais pas trouver une façon standard de le faire et je ne suis pas sûr que ce soit une bonne pratique de gabarit.
Donc, j'ai créé un filtre Modèle:
@register.filter
def key2value(collection,key):
try:
return collection[unicode(key)] # It seems that my collection
# keys are in unicode...
except:
return ""
Cela semble être un filtre extrêmement puissant. Il a commencé à être un tag très spécifique, mais je ne pouvais pas penser à une raison de ne pas le rendre complètement générique. Je me demande s'il existe une façon standard de le faire et j'ai réinventé la roue, ou si ce code pouvait faire quelque chose qui pourrait compromettre le système.
Merci!
Je me rends compte que le problème de sécurité est lié à la sécurité de HTML. Je crois qu'en ne modifiant aucun défaut, il va échapper à l'info retournée, mais avec ce genre de filtre il serait impossible de vérifier que les éléments de la collection sont sûrs ... – iJames