Django中TinyMCE的Widget错误
我在使用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
这个内置过滤器。