在普通用户的管理表单之外使用 Django Tinymce?
Using Django Tinymce outside of admin forms for normal users?
我有一个基本模型,我添加了 django-tinymce HTMLField 用于富文本编辑。这在后端的管理表单中完美运行,就像预期的那样,所以我认为我已经正确设置了 tinymce 应用程序。
class BlogPost(models.Model):
blogtag = models.OneToOneField('PageInfo')
blogcontent = tinymce_models.HTMLField()
def __unicode__(self):
return self.blurbcontent
然后我在 forms.py 中有等效的模型形式:
class BlogForm(forms.ModelForm):
class Meta:
model = BlogPost
field = ['blogcontent']
exclude = ['blogtag']
但是当我在 views.py 中呈现表单并通过模板将其显示给用户时,tinymce 编辑器没有加载,并且我的模板中出现了一个纯文本区域表单字段。
if request.method == 'POST':
blogform = BlogForm(data=request.POST, instance=my_instance)
if blogform.is_valid():
blogform.save()
return HttpResponseRedirect('/' + url_param + '/')
else:
print blogform.errors
else:
blogform = BlogForm(instance=my_instance)
在我的模板中:
<头>{{blogform.media}}头>
{{blogform.blogcontent}}
我如何使用 tinymce 来满足我所有的非后端非管理表单需求?在此先感谢您的帮助。
编辑:
这是我对 tinymce 的设置:
TINYMCE_DEFAULT_CONFIG = {
'plugins': "table,spellchecker,paste,searchreplace",
'theme': "advanced",
'cleanup_on_startup': True,
'custom_undo_redo_levels': 10,
}
TINYMCE_SPELLCHECKER = False
TINYMCE_COMPRESSOR = False
我敢猜测您没有在模板的 <head>
中包含 {{ form.media }}
。
Django-Tinymce 需要很少的开销就可以工作,所以添加上面的内容应该可以正常工作。
所以我想出了如何使表单成为与 tinymce 应用程序本机支持的管理表单 tinymce 界面相同的 tinymce 表单。也许有更好的方法,但我发现如果你只是查看在表单字段中嵌入了 tinymce 的管理页面的源代码,你可以看到 django 的 textarea 小部件被 tinymce 应用程序覆盖HTML 表单字段中的 class 属性。
所以不要在你的模板中有这样的东西:
<head> {{blogform.media}} </head>
{{blogform.blogcontent}}
你可以将它包装在一个 tinymce class 标识符中,以告诉使用 header 命令加载的 tinymce javascript 像这样用 tinymce 包装表单:
<head> {{blogform.media}} </head>
<textarea class="tinymce"> {{blogform.blogcontent}} </textarea>
确保将此添加到 HTML 页面的顶部:
<!DOCTYPE HTML>
此致
罗尔
我有一个基本模型,我添加了 django-tinymce HTMLField 用于富文本编辑。这在后端的管理表单中完美运行,就像预期的那样,所以我认为我已经正确设置了 tinymce 应用程序。
class BlogPost(models.Model):
blogtag = models.OneToOneField('PageInfo')
blogcontent = tinymce_models.HTMLField()
def __unicode__(self):
return self.blurbcontent
然后我在 forms.py 中有等效的模型形式:
class BlogForm(forms.ModelForm):
class Meta:
model = BlogPost
field = ['blogcontent']
exclude = ['blogtag']
但是当我在 views.py 中呈现表单并通过模板将其显示给用户时,tinymce 编辑器没有加载,并且我的模板中出现了一个纯文本区域表单字段。
if request.method == 'POST':
blogform = BlogForm(data=request.POST, instance=my_instance)
if blogform.is_valid():
blogform.save()
return HttpResponseRedirect('/' + url_param + '/')
else:
print blogform.errors
else:
blogform = BlogForm(instance=my_instance)
在我的模板中: <头>{{blogform.media}}头> {{blogform.blogcontent}}
我如何使用 tinymce 来满足我所有的非后端非管理表单需求?在此先感谢您的帮助。
编辑: 这是我对 tinymce 的设置:
TINYMCE_DEFAULT_CONFIG = {
'plugins': "table,spellchecker,paste,searchreplace",
'theme': "advanced",
'cleanup_on_startup': True,
'custom_undo_redo_levels': 10,
}
TINYMCE_SPELLCHECKER = False
TINYMCE_COMPRESSOR = False
我敢猜测您没有在模板的 <head>
中包含 {{ form.media }}
。
Django-Tinymce 需要很少的开销就可以工作,所以添加上面的内容应该可以正常工作。
所以我想出了如何使表单成为与 tinymce 应用程序本机支持的管理表单 tinymce 界面相同的 tinymce 表单。也许有更好的方法,但我发现如果你只是查看在表单字段中嵌入了 tinymce 的管理页面的源代码,你可以看到 django 的 textarea 小部件被 tinymce 应用程序覆盖HTML 表单字段中的 class 属性。 所以不要在你的模板中有这样的东西:
<head> {{blogform.media}} </head>
{{blogform.blogcontent}}
你可以将它包装在一个 tinymce class 标识符中,以告诉使用 header 命令加载的 tinymce javascript 像这样用 tinymce 包装表单:
<head> {{blogform.media}} </head>
<textarea class="tinymce"> {{blogform.blogcontent}} </textarea>
确保将此添加到 HTML 页面的顶部:
<!DOCTYPE HTML>
此致
罗尔