2008-10-26 9 views
14

Dans mon application django j'utilise un template pour construire le corps du mail, l'un des paramètres est url, notez qu'il y a deux paramètes séparés par des esperluette dans l'url.Comment désactiver le codage HTML lors de l'utilisation Context dans django

t = loader.get_template("sometemplate") 
c = Context({ 
    'foo': 'bar', 
    'url': 'http://127.0.0.1/test?a=1&b=2', 
}) 
print t.render(c) 

Après avoir rendu ce produit: http://127.0.0.1/test?a=1&b=2

Notez l'esperluette est HTML codé comme "& amp;". Une façon de contourner le problème est de passer chaque paramètre séparément à mon modèle et de construire l'URL dans le modèle, mais je voudrais éviter de le faire.

Existe-t-il un moyen de désactiver le codage HTML des paramètres de contexte ou à tout le moins d'éviter le codage des esperluettes?

Répondre

19

Pour la désactiver pour une seule variable, utilisez mark_safe:

from django.utils.safestring import mark_safe 

t = loader.get_template("sometemplate") 
c = Context({ 
    'foo': 'bar', 
    'url': mark_safe('http://127.0.0.1/test?a=1&b=2'), 
}) 
print t.render(c) 

Sinon, pour transformer totalement autoescaping hors de votre code Python, use the autoescape argument when initialising a Context:

c = Context({ 
    'foo': 'bar', 
    'url': 'http://127.0.0.1/test?a=1&b=2', 
}, autoescape=False) 

La section How to turn [Automatic HTML escaping] off de la documentation couvre certaines des options in-template si vous préférez le faire là-bas.

+0

mark_safe fait exactement ce que je voulais, j'en avais besoin seulement pour 1 paramètre –

7

Ou utilisez simplement le filtre "safe" dans votre template.

Aussi, je ne peux pas trop souligner à quel point il est important de se familiariser avec la documentation de Django; Beaucoup de questions communes comme celle-ci ont des réponses et des explications faciles à trouver (like this one), et en lisant les docs et en essayant de comprendre comment tout fonctionne, cela réduira drastiquement le temps que vous devez passer à demander "pourquoi a-t-il fait ça"? et augmentez le temps que vous consacrez à la construction de choses qui fonctionnent comme vous le souhaitez.