2008-10-26 22 views
14

W mojej aplikacji django używam szablonu do budowy treści wiadomości e-mail, jednym z parametrów jest adres url, zauważ, że są dwa parametry oddzielone znakami ampersand w adresie URL.Jak wyłączyć kodowanie HTML podczas korzystania z kontekstu w 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) 

Po renderingu produkuje: http://127.0.0.1/test?a=1&b=2

Zanotuj ampersand HTML jest kodowana jako "& amp;". Jednym ze sposobów obejścia problemu jest przekazanie każdego parametru osobno do mojego szablonu i skonstruowanie adresu URL w szablonie, ale chciałbym tego uniknąć.

Czy istnieje sposób wyłączenia kodowania HTML parametrów kontekstowych lub przynajmniej uniknięcia kodowania znaków ampersand?

Odpowiedz

19

Aby go wyłączyć dla pojedynczej zmiennej, użyj 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) 

Alternatywnie, aby całkowicie wyłączyć autoescaping off z kodu Pythona, 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) 

Sekcja How to turn [Automatic HTML escaping] off dokumentacji obejmuje niektóre opcje w szablonie, jeśli wolisz to zrobić.

+0

mark_safe zrobił dokładnie to, co chciałem, potrzebowałem go tylko dla 1 parametru –

7

Albo po prostu użyj "bezpiecznego" filtra w swoim szablonie.

Ponadto, nie mogę wystarczająco podkreślić, jak ważne jest zapoznanie się z dokumentacją Django; wiele typowych pytań, takich jak ten, zawiera łatwe do znalezienia odpowiedzi i objaśnienia (like this one), a czytanie przez dokumenty i wyczucie, jak wszystko działa, drastycznie skraca czas, który trzeba poświęcić, zapytaj "dlaczego to zrobił" i zwiększyć ilość czasu spędzanego na budowaniu rzeczy, które działają tak, jak chcesz.

Powiązane problemy