django-tinymce不显示格式工具栏

jma*_*jma 6 django tinymce django-tinymce

TL; DR - Tinymce的格式工具栏不显示.django生成的一行html似乎很可疑,但我不确定它为何就是这样.这是python 3.4和django 1.8.

我这样做了:

settings.py

我正在使用django-tinymce默认值.

INSTALLED_APPS = (
    ...,
    'django.contrib.staticfiles',
    ...,
    'tinymce',
    ...
)
Run Code Online (Sandbox Code Playgroud)

urls.py

...
url(r'^tinymce/', include('tinymce.urls'))
...

if settings.DEBUG:
    urlpatterns += patterns('django.views.static',
                            (r'^media/(?P<path>.*)',
                             'serve',
                             {'document_root': settings.MEDIA_ROOT}),)
    urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
Run Code Online (Sandbox Code Playgroud)

models.py

from tinymce.models import HTMLField

class BlogEntry(models.Model):
    ...
    #article_body = HTMLField()
    article_body = models.TextField()
Run Code Online (Sandbox Code Playgroud)

(文档建议HTMLField.其他来源建议使用TextField.到目前为止,结果是相同的.)

form.py

from tinymce.widgets import TinyMCE

class BlogEntryForm(forms.ModelForm)
    article_body = forms.CharField(
        widget=TinyMCE(#mce_attrs={
            #'plugin_preview_pageurl': reverse('tinymce-preview', "blog")},
                       attrs={
                           'cols': 80, 'rows': 30,
                           'placeholder': 'contenu',
                           'class': 'lkz-input'}),)
Run Code Online (Sandbox Code Playgroud)

模板

{% extends "kernel/base.html" %}

{% block extra_head %}

<!-- before media -->
{{ entry.media }}
<!-- after media -->
<script type="text/javascript" src="{% url "tinymce-js" "tinymce" %}"></script>
<!-- end -->
{% endblock extra_head %}

{% block content %}
<form method="post" action="">
{% csrf_token %}
...
{{ entry.article_body.errors }}
<label for="{{ entry.article_body.id_for_label }}" ></label> {{ entry.article_body }}<br>
...    
</form>
Run Code Online (Sandbox Code Playgroud)

我认为,这是我需要做的一系列事情.但是文本字段看起来像文本字段.

一个相当奇怪的事情(和主要的嫌疑人)是我看到这个HTML服务:

<!-- before media -->
<script type="text/javascript" src="/static/tiny_mce/tiny_mce.js"></script>
<script type="text/javascript" src="/static/django_tinymce/init_tinymce.js"></script>
<script type="text/javascript" src="/static/{% media %}/tiny_mce/tinymce.min.js"></script>
<!-- after media -->
<script type="text/javascript" src="/tinymce/js/textareas/tinymce/"></script>
<!-- end -->
Run Code Online (Sandbox Code Playgroud)

/static/{% media %}/3行显然是错误的,但我不知道它来自哪里.我发现的最接近的一点是tinymce/settings.py,它不是逐字相同的(没有'min').

Fwiw,如果我错误地配置了这个,我目前有这些值:

STATIC_PATH = os.path.join(BASE_DIR,'static')
STATIC_ROOT = ''
STATIC_URL = '/static/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'
Run Code Online (Sandbox Code Playgroud)

附带问题

tinymce docs(不是django-tinymce)建议从CDN获取tinymce.Django-tinymce打包它.任何人都知道这可能是什么优势(除了本地调试)?

小智 1

我和你有同样的问题和相同的配置,你应该在浏览器控制台中阅读。

我得到:

Uncaught TypeError: $ is not a function
(anonymous function) @ init_tinymce.js:18
(anonymous function) @ init_tinymce.js:38
Run Code Online (Sandbox Code Playgroud)

https://github.com/aljosa/django-tinymce/tree/master/tinymce/static/django_tinymce 是为 1.4-1.7 制作的

编辑:

我找到了解决我的问题的方法,尝试看看它是否适合您, 编辑文件 init_tinymce.js

# at the begging of the file
-(function ($) {
+$(document).ready(function() {

# at the end
-}(django.jQuery));
+});
Run Code Online (Sandbox Code Playgroud)

此外,您还必须在setting.py中注释TINYMCE_COMPRESSOR = True或将其配置为 False 。

如果启用,TINYMCE_COMPRESSOR 将抛出其他 js 错误。