Soru Flask / jinja2'de html olarak gösterilmesini istediğimde metin kaçtı


Bir feed'i rss'den alıyorum ve verileri bir appengine db'de saklıyorum. RSS feed içeriği tüm html'yi içerir. Yani bu python kodum var:

@app.route("/rssRead")
def pullRss():
    feedItem = db.getFeedItemByName(request.args.get('title',None), request.args.get('key',None))
    return render_template("rss.html", data= Markup(feedItem.html).unescape())

Ve benim html şablonum şöyle:

{% extends "layout.html" %}
{% block body %}
{{ data }}
{% endblock %}

Sayfayı görüntülediğimde, gerçek html biçimlendirmesinin görüntülendiğini, html verilerini nasıl çözebilirim?


23
2018-04-06 19:55


Menşei




Cevaplar:


Kullanmalısın data=Markup(feedItem.html) yerine data=Markup(feedItem.html).unescape().

FeedItem.html dosyasının daha önce kullanılmadığı varsayıldığında, unescape () öğesinin burada yapılacak hiçbir şeyi yoktur ve bu nedenle boşa giden bir yöntem çağrısıdır. Daha da kötüsü yapmak için, bir Markup nesnesi yerine bir string / unicode nesnesi döndürür, bu da Jinja2'nin kaçma işleminin gerçekleştirilmesi sırasında gereksiz olduğunu bilmesine izin vermez. Başka bir deyişle, unescape () öğesinin burada hem python kodunu hem de şablon kodunu gereksiz yere karıştırması ve şablon alanlarına gereksiz bir şekilde bu alanın şablonlarında özel bir durum olduğunu bilmenin ekstra sorumluluğu üzerinde durur.


13
2018-04-06 20:30





Bu da işe yaramalı.

{% extends "layout.html" %}
{% block body %}
{{ data|safe }}
{% endblock %}

89
2018-04-07 16:43



Bu da teşekkürler, sadece 1'i tercih edin. - arinte
Sadece teşekkür etmek için, bu "| güvenli" bölüm sihirli, basit ve harika gibi çalışır! :) - wont_compile
İstenen çıktıyı üretir, ancak aynı zamanda python kodunda gereksiz bir unescape () çağrısı gizler, Python kodunu Jinja'ya geçtiğini doğru bir şekilde gösteremediği bir durumda bırakır, bunu bilme sorumluluğunu şablonun sorumluluğu üzerine iter. data bu şekilde temsil edilmemesine rağmen işaretlemeyi içerir ve şablonu gereksiz yere karıştırır. |safe aramak. Oldukça ideal değil. - ʇsәɹoɈ
Bu cevap çok daha fazla değerde - Django'da da aynı sorun vardı ve bunu çözdü. - TrakJohnson
Bir grup yardımcısı da çok değerlidir, ama yine de kendinizi ilk etapta kesmemek daha iyidir. - ʇsәɹoɈ