Jinja2 otomatik olarak tüm HTML etiketlerinden kaçar, ancak bazı etiketlerden (img
, b
ve diğerleri gibi) kaçmak istemiyorum. Nasıl yapabilirim?Jinja2 tüm HTML'den kurtul, ancak img, b, etc
cevap
Kendi filtrenizi yazabilirsiniz. scrubber library, HTML'yi temizlerken oldukça iyidir. Filtrenin döndürülen dizgiyi jinja2.Markup
içine sarması gerekecek, böylece şablon yeniden çıkmayacak.
Düzenleme:
import jinja2
import scrubber
def sanitize_html(text):
return jinja2.Markup(scrubber.Scrubber().scrub(text))
jinja_env.filters['sanitize_html'] = sanitize_html
Beyaz bir liste yaklaşımla sunulması üzerine giriş ayrıştırmak isteyeceksiniz bir kod örneği - birkaç iyi örnekler in this question ve orada viable options vardır.
{{comment|safe}}
Bleach kütüphane çok iyi yapabilirsiniz: Bunu yaptıktan sonra
, sen safe
filtreli çıkılmamalıdır HTML içerecek herhangi bir değişken işaretleyebilirsiniz. Ayrıca çağrılabilir kullanabilirsiniz
<p>{{ my_variable|clean(tags=['img', 'b', 'i', 'em', 'strong'], attributes={'img': ['src', 'alt', 'title', 'width', 'height']}) }}</p>
(yerine:
from bleach import clean
from markupsafe import Markup
def do_clean(text, **kw):
"""Perform clean and return a Markup object to mark the string as safe.
This prevents Jinja from re-escaping the result."""
return Markup(clean(text, **kw))
jinja_env.filters['clean'] = do_clean
Sonra bir şablon içinde aşağıdaki gibi bir şey olabilir: değişken 'jinja_env' varsayarak Örneğin
, kapsam içindedir bir liste) özniteliklerde, özniteliklerin daha ayrıntılı bir şekilde doğrulanmasını sağlar (örneğin, src'nin geçerli bir URL sağladığını kontrol etme). Belgeler, an example'u gösterir.