【问题标题】:Django admin: allowing some HTML in user inputDjango admin:允许用户输入中的一些 HTML
【发布时间】:2016-03-12 07:19:38
【问题描述】:

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

【问题讨论】:

    标签: html django django-models django-admin


    【解决方案1】:

    如果外部库对您来说不是负担,那么您必须尝试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. 在您的模板中:

      {% 加载漂白标签 %}

      {{ unsafe_html|漂白剂}}

    更多用法,我建议你必须阅读文档。它非常简单直接。

    documentation

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 据我所知,这仅在用户未输入 HTML 部分时才有效。
      猜你喜欢
      • 2021-05-21
      • 1970-01-01
      • 2016-04-06
      • 2013-05-02
      • 2021-05-14
      • 2012-04-01
      • 2011-04-06
      • 1970-01-01
      相关资源
      最近更新 更多