Frage

In meiner Django -Anwendung verwende ich eine Vorlage zum Bau von E -Mail -Körper, einer der Parameter ist die URL. Beachten Sie, dass zwei Parameter von Ampers und in der URL getrennt sind.

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

Nach dem Rendern produziert: http://127.0.0.1/test?a=1&b=2

Beachten Sie, dass der Ampere und HTML als "&" codiert ist. Eine Möglichkeit um das Problem besteht darin, jeden Parameter getrennt an meine Vorlage zu übergeben und die URL in der Vorlage zu konstruieren. Ich möchte dies jedoch vermeiden.

Gibt es eine Möglichkeit, die HTML -Codierung von Kontextparametern zu deaktivieren oder zumindest die Codierung von Ampersands zu vermeiden?

War es hilfreich?

Lösung

Verwenden Sie es, um es für eine einzelne Variable auszuschalten 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)

Alternativ Alternativ, um automatisch aus Ihrem Python -Code auszuschalten. Verwenden Sie das autoescape Argument bei der Initialisierung a Context:

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

Das Wie schaltet man [automatische HTML -Flucht] aus Der Abschnitt der Dokumentation deckt einige der In-Template-Optionen ab, wenn Sie dies dort lieber tun möchten.

Andere Tipps

Oder verwenden Sie einfach den "sicheren" Filter in Ihrer Vorlage.

Ich kann auch nicht genug betonen, wie wichtig es ist, mit Djangos Dokumentation vertraut zu sein. Viele häufige Fragen wie diese haben leicht zu findende Antworten und Erklärungen (wie dieser) und das Lesen der Dokumente und das Erhalten eines Gefühls dafür, wie alles funktioniert .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top