【发布时间】:2016-03-12 07:19:38
【问题描述】:
默认情况下,Django 管理员会从用户输入中去除所有 HTML 标记。我想允许一小部分标签,比如<a>。最简单的方法是什么?我知道allow_tags,但它已被弃用。我还想小心手动将字符串标记为不安全的。
【问题讨论】:
标签: html django django-models django-admin
默认情况下,Django 管理员会从用户输入中去除所有 HTML 标记。我想允许一小部分标签,比如<a>。最简单的方法是什么?我知道allow_tags,但它已被弃用。我还想小心手动将字符串标记为不安全的。
【问题讨论】:
标签: html django django-models django-admin
如果外部库对您来说不是负担,那么您必须尝试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']
在您的模板中:
{% 加载漂白标签 %}
{{ unsafe_html|漂白剂}}
更多用法,我建议你必须阅读文档。它非常简单直接。
【讨论】:
您可以使用format_html() 或mark_safe() 代替allow_tags。虽然,就像你说的,mark_safe() 对于用户输入可能不是一个好主意。
format_html():https://docs.djangoproject.com/en/1.9/ref/utils/#django.utils.html.format_htmlmark_safe():https://docs.djangoproject.com/en/1.9/ref/utils/#django.utils.safestring.mark_safe
【讨论】: