【问题标题】:Using Django Tinymce outside of admin forms for normal users?在普通用户的管理表单之外使用 Django Tinymce?
【发布时间】:2015-04-22 04:16:14
【问题描述】:

我有一个基本模型,我添加了 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

【问题讨论】:

    标签: javascript python django django-forms


    【解决方案1】:

    我会冒险猜测您没有在模板的<head> 中包含{{ form.media }}

    Django-Tinymce 只需很少的开销即可开始工作,因此添加上述内容,它应该可以正常工作。

    【讨论】:

    • 感谢您的快速回复。不幸的是,我之前确实尝试过,但没有奏效。我在标题中添加了 {{blogform.media}}。我将我的 settings.py tinymc 配置编辑到原始帖子中,以防万一那是我歪斜的地方。澄清一下,奇怪的是 django 的管理站点完美地利用了 tinymce 编辑器。
    【解决方案2】:

    所以我想出了如何使表单成为与 tinymce 应用程序本机支持的管理表单 tinymce 界面相同的 tinymce 表单。也许有更好的方法来做到这一点,但我发现如果你只是查看在表单字段中嵌入了 tinymce 的管理页面的源代码,你可以看到 django 的 textarea 小部件被 tinymce 应用程序覆盖HTML 表单字段中的类属性。 所以不要在你的模板中使用这样的东西:

      <head> {{blogform.media}} </head> 
      {{blogform.blogcontent}}
    

    您可以将其包装在 tinymce 类标识符中,以告诉加载了 header 命令的 tinymce javascript 使用 tinymce 包装表单,如下所示:

       <head> {{blogform.media}} </head> 
       <textarea class="tinymce"> {{blogform.blogcontent}} </textarea>
    

    【讨论】:

      【解决方案3】:

      确保将其添加到 HTML 页面的顶部:

      <!DOCTYPE HTML>
      

      Documentation

      最好的问候

      罗尔

      【讨论】:

        猜你喜欢
        • 2011-01-17
        • 2021-03-05
        • 1970-01-01
        • 1970-01-01
        • 2011-11-12
        • 2017-10-10
        • 2018-01-21
        • 1970-01-01
        相关资源
        最近更新 更多