Django 管理员:允许用户输入一些 HTML
Django admin: allowing some HTML in user input
默认情况下,Django 管理员会从用户输入中删除所有 HTML 标签。我想允许一小部分标签,比如 <a>
。最简单的方法是什么?我知道 allow_tags
,但它已被弃用。我还想小心地手动将字符串标记为安全的,而不是安全的。
您可以使用 format_html()
或 mark_safe()
代替 allow_tags
。虽然,正如您所说,mark_safe()
可能不是用户输入的好主意。
format_html()
: https://docs.djangoproject.com/en/1.9/ref/utils/#django.utils.html.format_html
mark_safe()
: https://docs.djangoproject.com/en/1.9/ref/utils/#django.utils.safestring.mark_safe
如果外部库对您来说不是负担,那么您必须尝试 django-bleach,它会满足您的要求。它 returns 有效 HTML 仅包含您指定的允许标签。
配置:
在 settings.py
BLEACH_ALLOWED_TAGS = ['p', 'b', 'i', 'u', 'em', 'strong', 'a']
BLEACH_ALLOWED_ATTRIBUTES = ['href', 'title', 'style']
BLEACH_STRIP_TAGS = True
用例:
1. 在您的模型中:
from django import models
from django_bleach.models import BleachField
class Post(models.Model):
title = models.CharField()
content = BleachField()
2。在您的表单中:
class PostForm(forms.ModelForm):
content = BleachField()
class Meta:
model = Post
fields = ['title', 'content']
在您的模板中:
{%负载bleach_tags%}
{{ unsafe_html|漂白剂 }}
更多用法,建议大家一定要看文档。它非常简单直接。
默认情况下,Django 管理员会从用户输入中删除所有 HTML 标签。我想允许一小部分标签,比如 <a>
。最简单的方法是什么?我知道 allow_tags
,但它已被弃用。我还想小心地手动将字符串标记为安全的,而不是安全的。
您可以使用 format_html()
或 mark_safe()
代替 allow_tags
。虽然,正如您所说,mark_safe()
可能不是用户输入的好主意。
format_html()
: https://docs.djangoproject.com/en/1.9/ref/utils/#django.utils.html.format_html
mark_safe()
: https://docs.djangoproject.com/en/1.9/ref/utils/#django.utils.safestring.mark_safe
如果外部库对您来说不是负担,那么您必须尝试 django-bleach,它会满足您的要求。它 returns 有效 HTML 仅包含您指定的允许标签。
配置: 在 settings.py
BLEACH_ALLOWED_TAGS = ['p', 'b', 'i', 'u', 'em', 'strong', 'a']
BLEACH_ALLOWED_ATTRIBUTES = ['href', 'title', 'style']
BLEACH_STRIP_TAGS = True
用例: 1. 在您的模型中:
from django import models
from django_bleach.models import BleachField
class Post(models.Model):
title = models.CharField()
content = BleachField()
2。在您的表单中:
class PostForm(forms.ModelForm):
content = BleachField()
class Meta:
model = Post
fields = ['title', 'content']
在您的模板中:
{%负载bleach_tags%}
{{ unsafe_html|漂白剂 }}
更多用法,建议大家一定要看文档。它非常简单直接。