Django 模板中的 TinyMCE

问题描述 投票:0回答:3

使用django-tinymce我之前已经成功地将TinyMCE嵌入到Admin中。然而,将其嵌入前端形式似乎对我不起作用。

我有一个模型表单。它不添加任何额外的字段(“comment”和“statement”是唯一使用的字段,它们存在于模型中)。在该表单的文本区域“评论”字段中,我想使用 TinyMCE。我尝试过以下方法:

class EntryForm(forms.ModelForm):
    comment = forms.CharField(widget=TinyMCE(attrs={'cols': 80, 'rows': 30}, mce_attrs=TINYMCE_USER_CONFIG))

    class Meta:
        model = Entry
        fields = ['statement','comment',]

class EntryForm(forms.ModelForm):
    class Meta:
        model = Entry
        fields = ['statement','comment',]

    def __init__(self, *args, **kwargs):
        super(EntryForm, self).__init__(*args, **kwargs)
        self.fields['comment'].widget = TinyMCE(attrs={'cols': 80, 'rows': 15}, mce_attrs=TINYMCE_USER_CONFIG,)

class EntryForm(forms.ModelForm):

    class Meta:
        model = Entry
        fields = ['statement','comment',]

    class Media:
        js = ('/media/tinymce/jscripts/tiny_mce/tiny_mce.js',
                '/sitemedia/js/tinymce_setup.js',)

HEAD
html 标签中,我放置了
{{ form.media }}
(该表单在视图和模板中称为
form
)。我还使用 Grappelli 和 Filebrowser 进行管理。

有人可以解释一下我缺少什么或者让它发挥作用的过程吗? 非常感谢!

django templates tinymce django-tinymce
3个回答
5
投票

回答我自己的问题:最后一个选项有效。

问题是“/sitemdia/js/tinymce_setup.js”是一个 Grappelli 安装文件。这只能由管理员使用。我删除了那一点,所以我最终得到:

class Media:
    js = ('/media/tinymce/jscripts/tiny_mce/tiny_mce.js',
            '',)

在标题中我添加了

<script type="text/javascript">
        tinyMCE.init({
                mode: "textareas",
                theme: "simple"
        });
</script>

您还可以插入另一个有效的文件(例如其中包含 tinyMCE.init 代码),而不是删除安装文件。

这应该可以解决问题:)。


0
投票

经过一整天的搜索和尝试,我发现在 Django 应用程序上使用tinyMCE 的前端版本要容易得多,通过 TinyMCE 的 CDN 提供

内容以 HTML 标签保存,并可以通过 html 标签显示给用户。

我试图让解决方案尽可能通用,即应该移动和引用 javascript。如果前端所见即所得的使用人数比您多,您应该将索引中的 |safe 更改为清理功能,以确保安全/防止不必要的代码黑客攻击。

作为渲染 TinyMCE 的前端 CDN 不需要安装后端,其中包含的viewspy和urls.py向我们展示向用户提供他们输入内容的视图。

CDN 链接 https://www.tinymce.com/download/

索引.html

    {% load staticfiles %}
<!-- <link rel="stylesheet" type="text/css" href="{% static 'wys/style.css' %}" /> -->
<!DOCTYPE html>
<html>
<head>
  <!-- Load TinyMCE from CDN -->
  <script src="//cdn.tinymce.com/4/tinymce.js"></script>
<!-- Set preference of what should be visible on init -->
<script>tinymce.init({
      selector: '#foo',
      height: 200,
      theme: 'modern',
      plugins: [
        'advlist autolink lists link image charmap print preview hr anchor pagebreak',
        'searchreplace wordcount visualblocks visualchars code fullscreen',
        'insertdatetime media nonbreaking save table contextmenu directionality',
        'emoticons template paste textcolor colorpicker textpattern imagetools codesample toc'
      ],
      toolbar1: 'undo redo | insert | styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link image',
      toolbar2: 'print preview media | forecolor backcolor emoticons | codesample',
      image_advtab: true,
      templates: [
        { title: 'Test template 1', content: 'Test 1' },
        { title: 'Test template 2', content: 'Test 2' }
      ],
      content_css: [
        '//fonts.googleapis.com/css?family=Lato:300,300i,400,400i',
        '//www.tinymce.com/css/codepen.min.css'
      ]
     });
    </script>
    </head>



    <body>
    <h1>This is the homepage</h1>

      <h1>Below Are 2 Form Areas</h1>
    <form method="GET">
        Question: <input type="text" id="foo" name="search"><br/><br/><br/><br/><br/>
        Name: <input type="text"  id="bar" name="name"><br/><br/><br/><br/><br/><br/>
        <input type="submit" value="Submit" />
    </form><br/><br/>



    <h3>Display of question</h3>
    {% for question in questions %}
      <p>{{ question.query|safe}}</p>
      <p>{{ question.user_id|safe}}</p>
    {% endfor %}

    </body>

views.py

from django.shortcuts import render
from .models import Queries

def MainHomePage(request):
    questions=None
    if request.GET.get('search'):
        search = request.GET.get('search')
        questions = Queries.objects.filter(query__icontains=search)

        name = request.GET.get('name')
        query = Queries.objects.create(query=search, user_id=name)
        query.save()

    return render(request, 'wys/index.html',{
        'questions': questions,
    })
应用程序中的

urls.py

from django.conf.urls import url

from . import views


app_name = 'wys'
urlpatterns = [
    url(r'^', views.MainHomePage, name='index'),
    # url(r'^', views.MainHomePage, name='index'),
]

0
投票

我解决这个问题如下

{{ model.body|safe }}
© www.soinside.com 2019 - 2024. All rights reserved.