2012-06-03 13 views
6

Con Django, è possibile per gli utenti inviare HTML in un campo modulo, salvarlo e quindi visualizzare l'HTML nel modello?Django: consente all'utente di inviare HTML valido nel campo modulo

Un esempio è un utente che aggiunge un collegamento all'interno di un campo di testo che deve quindi essere visualizzato come un tag all'interno del resto del testo.

L'utente avrebbe qualcosa di simile in ingresso:

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

il link in modo sarebbe un collegamento, invece di renderlo come testo.

risposta

11

Django scappa di default. È possibile contrassegnare una stringa come safe tramite un filter or tag per impedire il comportamento di escape automatico.

{{ my_text_with_html|safe }} 

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

Se si accetta utente HTML immesso, ti consigliamo di disinfettare in modo che non possono scrivere script e tale .. per questo, basta cercare pitone html sanificazione e applicarlo prima di inviare i dati al modello .

Python HTML sanitizer/scrubber/filter

3

Si può dire Django il codice HTML è sicuro contrassegnando con the appropriate filter:

{{ variable|safe }} 

È inoltre possibile utilizzare il autoescape tag per disattivare l'autoescaping:

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

Tuttavia, nel caso in cui abiliti questa funzione ad altri (sconosciuti) utenti, ti consiglio vivamente di usare qualcos'altro, dato che HTML può essere q uite un dolore per disinfettare correttamente da Javascript o altre cose HTML che non volete (ad esempio, su * -argomenti ecc.). Django viene fornito con supporto di base per alcuni markup languages che puoi fornire ai tuoi utenti. Immagino che il markdown sia il più popolare.

+0

Il markup di Django è stato deprecato. Se desideri utilizzare il markup non HTML, dovrai utilizzare un progetto contrib come questo: https://github.com/jamesturk/django-markupfield – Tristan

Problemi correlati