You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否在Django Admin面板中使用HTML标签?寻求更优富文本编辑方案

Django Admin 富文本编辑优化方案

针对你想要在Django Admin中添加粗体、斜体、标题等富文本编辑功能的需求,以下是几个更优的成熟方案:

1. django-tinymce(功能完备的经典选择)

这是Django生态中最常用的富文本编辑器插件,支持几乎所有主流富文本功能,配置灵活且维护稳定。

  • 安装:
    pip install django-tinymce
    
  • 在settings.py中配置:
    INSTALLED_APPS = [
        # 其他已注册应用
        'tinymce',
    ]
    
    TINYMCE_DEFAULT_CONFIG = {
        'height': 400,
        'width': '100%',
        'plugins': '''
            textcolor save link image media preview codesample contextmenu
            table code lists fullscreen insertdatetime nonbreaking
            directionality searchreplace wordcount visualblocks
        ''',
        'toolbar1': '''
            fullscreen preview bold italic underline | fontselect fontsizeselect
            | forecolor backcolor | alignleft alignright aligncenter alignjustify
            | indent outdent | bullist numlist table | link image media
        ''',
        'menubar': 'file edit view insert format tools',
        'statusbar': True,
    }
    
  • 在admin.py中绑定到模型字段:
    from django.contrib import admin
    from tinymce.widgets import TinyMCE
    from .models import YourModel
    
    class YourModelAdmin(admin.ModelAdmin):
        formfield_overrides = {
            models.TextField: {'widget': TinyMCE()},
        }
    
    admin.site.register(YourModel, YourModelAdmin)
    

2. django-quill-editor(轻量现代的替代方案)

如果偏好更简洁的现代界面,且不需要过于复杂的功能,这个基于Quill.js的插件是不错的选择。

  • 安装:
    pip install django-quill-editor
    
  • 在settings.py中注册应用:
    INSTALLED_APPS = [
        # 其他已注册应用
        'django_quill',
    ]
    
  • 在admin.py中使用:
    from django.contrib import admin
    from django_quill.admin import QuillModelAdmin
    from .models import YourModel
    
    class YourModelAdmin(QuillModelAdmin):
        quill_fields = ('your_text_field_name',)
    
    admin.site.register(YourModel, YourModelAdmin)
    

3. 安全注意事项

无论使用哪种方案,必须防范XSS攻击:

  • 用Django自带的bleach库过滤危险HTML标签:
    import bleach
    from django.db import models
    
    class YourModel(models.Model):
        content = models.TextField()
    
        def save(self, *args, **kwargs):
            # 仅允许安全的HTML标签和属性
            allowed_tags = ['b', 'i', 'u', 'h1', 'h2', 'p', 'ul', 'ol', 'li', 'a']
            allowed_attrs = {'a': ['href', 'title']}
            self.content = bleach.clean(self.content, tags=allowed_tags, attributes=allowed_attrs)
            super().save(*args, **kwargs)
    
  • 若要在Admin列表页显示渲染后的HTML预览:
    from django.utils.safestring import mark_safe
    
    class YourModelAdmin(admin.ModelAdmin):
        list_display = ('id', 'content_preview')
    
        def content_preview(self, obj):
            return mark_safe(obj.content[:100] + '...')  # 截断显示
        content_preview.short_description = '内容预览'
    

内容的提问来源于stack exchange,提问作者Kurosh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 01:57:17