Подтвердить что ты не робот

Отключить HTML-экранирование в Django TextField

Как отключить автоматическое выключение HTML файла Django, когда я пишу в модель TextField?

4b9b3361

Ответ 1

Просто используйте django safe фильтр. В вашем шаблоне вы сделаете что-то вроде этого:

{{ instance.my_text_field|safe }}

Ответ 2

Один из способов сделать это - поместить функцию в вашу модель, которая возвращает данные, помеченные как безопасные:

from django.utils.safestring import mark_safe 

class MyModel(models.Model): 
    my_textfield = models.TextField()

    def display_my_safefield(self): 
        return mark_safe(self.my_textfield)

Затем в шаблоне вы должны будете использовать:

{{ instance.display_my_safefield }}

Ответ 3

Я думаю, что способ лучше сделать это, как описано @Daniel Vassallo.

Почему?

Таким образом, вы можете сделать несколько операций безопасности в HTML-коде, который вы хотите отображать, без экранирования, особенно для защиты от межсайтового скриптинга (XSS).

Например, вы можете проверить, содержит ли my_textfield тег script. Если это так, отметьте экземпляр как вредоносный и верните экранированную версию my_textfield (нормальное поведение Django).
В противном случае используйте mark_safe, чтобы вернуть код HTML, помеченный как безопасный.

Здесь:

from django.utils.safestring import mark_safe 

class MyModel(models.Model): 
    my_textfield = models.TextField()
    is_malisious = models.BooleanField(default=False)

    def display_my_safefield(self):
        if '<script>' in self.my_textfield:
            self.is_malicious = True
            self.save()
            return self.my_textfield
        return mark_safe(self.my_textfield)

И все это не требует каких-либо переходов в базу данных.

Альтернативный подход

Я думаю, что вы можете сделать эту операцию безопасности, переопределив метод save() вашей модели, включая проверку и любую другую необходимую операцию против вредоносного содержимого внутри нее. Затем вы можете использовать решение @bjunix, если вы обеспечите безопасность любого сохраненного содержимого.