together not example delete choices html django django-models textfield

not - Deshabilite el escapado de HTML en Textfield de Django



imagefield django (3)

¿Cómo puedo desactivar el escaneo automático de HTML de Django cuando escribo en el TextField del modelo?


Creo que la mejor manera de hacerlo es como lo describió @Daniel Vassallo.

¿Por qué?

Debido a que de esta manera, puede realizar algunas operaciones de seguridad en el código HTML que desea visualizar sin escapar, especialmente para proteger contra el uso de scripts de sitios cruzados ( XSS ).

Por ejemplo, puede verificar si my_textfield contiene una etiqueta de script .
Si es así, marque la instancia como maliciosa y devuelva una versión escapada de my_textfield (el comportamiento normal de Django).
De lo contrario, use mark_safe para devolver su código HTML marcado como seguro .

Aquí:

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)

Y todo esto no necesita migraciones a la base de datos.

Enfoque alternativo

Creo que puede hacer esta operación de seguridad anulando el método save() de su modelo, e incluyendo el cheque y cualquier otra operación necesaria contra contenido malicioso dentro de él. Luego, puede usar la solución @bjunix si se aseguró de que el contenido guardado sea seguro.


Solo usa el filtro safe de django. En tu plantilla harías algo como esto:

{{ instance.my_text_field|safe }}


Una forma de hacerlo es poner una función en su modelo que devuelve los datos marcados como seguros:

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)

Luego, en la plantilla, deberías usar:

{{ instance.display_my_safefield }}