Django admin:在用户输入中允许一些HTML

时间:2015-12-07 15:56:14

标签: html django django-models django-admin

默认情况下,Django管理员会从用户输入中删除所有HTML标记。我想允许一小部分标记,比如<a>。最简单的方法是什么?我知道allow_tags,但它已被弃用。我还要小心手动将字符串标记为非安全字符串。

2 个答案:

答案 0 :(得分:0)

您可以使用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

答案 1 :(得分:0)

如果外部图书馆不是您的负担,那么您必须尝试django-bleach,这将满足您的要求。它返回仅包含指定允许标记的有效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. 在您的模板中:

    {%load bleach_tags%}

    {{unsafe_html | bleach}}

  2. 如需更多用法,建议您阅读文档。它非常简单直接。

      

    documentation