Я думаю, что лучше способ сделать это, как описал @Daniel Vassallo.
Почему?
Таким образом, вы можете выполнить некоторые операции безопасности для HTML-кода, который вы хотите отобразить без экранирования, особенно для защиты от межсайтовых скриптов ( XSS ).
Например, вы можете проверить, содержит ли my_textfield
тег script .
Если это так, пометьте экземпляр как вредоносный и верните экранированную версию my_textfield
(нормальное поведение Django).
В противном случае используйте mark_safe
, чтобы вернуть HTML-код, помеченный как safe .
Здесь:
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, если вы уверены, что любой сохраненный контент безопасен.