2012-06-03 14 views
6

Czy z Django użytkownicy mogą przesłać HTML w formularzu, zapisać go, a następnie wyrenderować kod HTML w szablonie?Django: Zezwalaj użytkownikom na przesyłanie poprawnego kodu HTML w polu formularza

Przykładem jest użytkownik dodający łącze w polu tekstowym, które następnie powinno być renderowane jako znacznik w pozostałej części tekstu.

Użytkownik będzie wejście coś takiego:

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

The dolne tak byłoby powiązanie zamiast czynią je jako tekst.

Odpowiedz

11

Django domyślnie ucieka. Możesz oznaczyć ciąg znaków jako safe poprzez filter or tag, aby zapobiec automatycznemu zachowaniu się.

{{ my_text_with_html|safe }} 

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

Jeśli akceptujesz użytkownika wprowadzoną html, będziemy chcieli, aby zdezynfekować go tak, że nie można pisać skrypty i takie .. za to, wystarczy poszukać Pythona HTML sanitarna i stosować go przed wysłaniem danych do szablonu .

Python HTML sanitizer/scrubber/filter

3

Można powiedzieć Django HTML jest bezpieczny poprzez zaznaczenie go the appropriate filter:

{{ variable|safe }} 

Można również użyć autoescape tag wyłączyć autoescaping:

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

jednak w przypadku włączania tej funkcji dla innych (nieznanych) użytkowników, bardzo polecam użycie czegoś innego, ponieważ HTML może być q uite ból, aby właściwie odkażać od JavaScriptu lub innych rzeczy HTML, których nie chcesz (np. na * -arguments etc). Django jest w rzeczywistości dostarczany z podstawową obsługą dla niektórych markup languages, które możesz dostarczyć swoim użytkownikom. Domyślam się, że najpopularniejsze jest markdown.

+0

Znaczniki Django są przestarzałe. Jeśli chcesz używać znaczników innych niż HTML, musisz użyć projektu contrib, takiego jak ten: https://github.com/jamesturk/django-markupfield – Tristan

Powiązane problemy