Question

Dans mon application Django, j'utilise un modèle pour construire le corps de l'e-mail. L'un des paramètres est url. Notez qu'il existe deux paramètres séparés par une esperluette dans l'URL.

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 le rendu, il génère: http://127.0.0.1/test?a=1&b=2

Notez que l'esperluette est codée en HTML en tant que "& amp; amp;". Une solution au problème consiste à transmettre chaque paramètre séparément à mon modèle et à construire l’URL dans le modèle, mais j’aimerais éviter de le faire.

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

Était-ce utile?

La solution

Pour le 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)

Vous pouvez également désactiver totalement le calage automatique de votre code Python en utilise l'argument autoescape lors de l'initialisation d'un contexte :

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

Le Comment activer [HTML automatique échappement] off de la documentation couvre certaines des options incluses dans le modèle si vous préférez le faire ici.

Autres conseils

Ou utilisez simplement le " safe " filtrer dans votre modèle.

De plus, je ne saurais trop insister sur l’importance de connaître la documentation de Django; De nombreuses questions courantes comme celle-ci ont des réponses et des explications faciles à trouver ( comme celle-ci ), et en lisant la documentation et en ayant une idée du fonctionnement de tout, vous réduirez considérablement le temps que vous devez dépenser. Demandez-lui pourquoi il l'a fait. et augmentez le temps que vous passez à construire des choses qui fonctionnent comme vous le souhaitez.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top