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']
  1. 在您的模板中:

    {%负载bleach_tags%}

    {{ unsafe_html|漂白剂 }}

更多用法,建议大家一定要看文档。它非常简单直接。

documentation