Django中TinyMCE的Widget错误

0 投票
1 回答
783 浏览
提问于 2025-04-19 09:47

我在使用TinyMCE和Django时遇到了这个错误:

类型错误:init() 收到了一个意外的关键字参数 'widget'

我按照找到的说明进行了操作,但不知道为什么会出现这个错误。这里是我的模型:

class Article(models.Model):
    """Represents a wiki article"""

    title = models.CharField(max_length=100)
    slug = models.SlugField(max_length=50, unique=True)
    text = models.TextField(widget=TinyMCE(attrs={'cols': 80, 'rows': 30}))#      (help_text="Formatted using ReST")
    author = models.ForeignKey(User)
    is_published = models.BooleanField(default=False, verbose_name="Publish?")
    created_on = models.DateTimeField(auto_now_add=True)
    objects = models.Manager()
    published = PublishedArticlesManager()

注释 "#formatted in ReST" 是因为原来的TextField使用的是restructuredText格式。我实际上是从CDN获取了tinyMCE,并在相应模板的头部放置了一个非常简单的脚本。这样就加载了所见即所得的编辑器,但保存的页面却显示了HTML标签。

所以我在表单声明中添加了:

from django import forms

from models import Article, Edit, FileUploadHandler

from tinymce import models as tinymce_models

class ArticleForm(forms.ModelForm):
    class Meta:
        text = forms.Charfield(widget=TinyMCE(attrs={'cols': 80, 'rows': 30}))#(help_text="Formatted using ReST")
        model = Article
        exclude = ['author', 'slug']


class EditForm(forms.ModelForm):
    class Meta:
        model = Edit
        fields = ['summary']

class UploadImageForm(forms.ModelForm):
    class Meta:
        model = FileUploadHandler
        image = forms.ImageField()
        fields = ['title']

编辑器是有的,但保存后文章显示的还是HTML标签。为什么会这样呢?

1 个回答

0

widget 是用来设置表单字段的属性,而不是模型字段的属性。你需要把这个设置放到你的表单声明里(或者如果你想在后台使用,可以放到 formfield_overrides 里)。

如果你想在后面的视图中显示带格式的内容,而不想让 HTML 标签被转义,可以使用 |safe 这个内置过滤器。

撰写回答