2012-06-03 13 views
6

Django ile, kullanıcıların bir form alanına HTML göndermesi, kaydetmesi ve ardından HTML'yi şablonda oluşturması mümkün müdür?Django: Kullanıcının form alanında geçerli HTML sunmasına izin ver

Bir örnek, bir metin alanının içinde metnin geri kalanında bir etiket olarak işlenmesi gereken bir bağlantı ekleyen bir kullanıcıdır.

kullanıcı gibi girdi şey olacaktır:

this is a site called <a href="http://stackoverflow.com">SO</a>. 

SO bağlantı yerine metin olarak render bir bağlantı olacaktır.

cevap

11

Django, varsayılan olarak çıkar. Otomatik çıkış işlevini önlemek için bir dizeyi filter or tag aracılığıyla safe olarak işaretleyebilirsiniz.

{{ my_text_with_html|safe }} 

{% autoescape off %} 
    {{ my_test_with_html }} 
{% endautoescape %} 

kullanıcı girilen html kabul ederseniz, onlar komut yazma ve böyle .. bunun için, sadece piton html sanitizasyonunun arama ve şablona veri göndermeden önce uygulayamazsınız yüzden sterilize isteyeceksiniz . Ancak

{% autoescape off %} 
    {{ variable }} 
{% endautoescape %} 

:

{{ variable|safe }} 

Ayrıca autoescaping devre dışı bırakmak için autoescape tag kullanabilirsiniz:

Python HTML sanitizer/scrubber/filter

3

HTML the appropriate filter ile işaretleyerek güvenlidir Django söyleyebilir Bu özelliği diğer (bilinmeyen) kullanıcılar için etkinleştirmeniz durumunda, HTML'in q olabileceğinden başka bir şey kullanmanızı şiddetle tavsiye ederim. Javascript veya istemediğiniz diğer HTML-şeylerini (örneğin, * -argeller vb.) gerektiği gibi sterilize etmek için acı çekiniz. Django aslında kullanıcılarınıza sağlayabileceğiniz bazı markup languages için temel destek ile birlikte gelir. Sanırım markdown en popüler.

+0

Django işaretlemesi artık kullanımdan kaldırıldı. HTML olmayan biçimlendirmeyi kullanmak isterseniz, bunun gibi bir katkı projesini kullanmanız gerekir: https://github.com/jamesturk/django-markupfield – Tristan

İlgili konular