django-tinymce не показывает панель инструментов форматирования

TL;DR — панель инструментов форматирования Tinymce не отображается. Одна строка сгенерированного django html кажется подозрительной, но я не уверен, почему она там, где она есть. Это питон 3.4 и джанго 1.8.

Я сделал это:

settings.py

Я использую значения по умолчанию django-tinymce.

INSTALLED_APPS = (
    ...,
    'django.contrib.staticfiles',
    ...,
    'tinymce',
    ...
)

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)

модели.py

from tinymce.models import HTMLField

class BlogEntry(models.Model):
    ...
    #article_body = HTMLField()
    article_body = models.TextField()

(Документы предлагают 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'}),)

шаблон

{% 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>

что, я думаю, является набором вещей, которые мне нужно было сделать. Но текстовое поле просто выглядит как текстовое поле.

Одна довольно странная вещь (и главная подозрение) заключается в том, что я вижу, что этот 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 -->

/static/{% media %}/ в строке 3 явно неверен, хотя я не понимаю, откуда он взялся. Ближайший бит источника, который я нашел, - это tinymce/settings.py, который не идентичен дословно (не имеет «мин»).

Между прочим, на случай, если я настроил это неправильно, сейчас у меня есть следующие значения:

STATIC_PATH = os.path.join(BASE_DIR,'static')
STATIC_ROOT = ''
STATIC_URL = '/static/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'

побочный вопрос

Документы tinymce (не django-tinymce) предлагают получать tinymce из CDN. Django-tinymce упаковывает его. Кто-нибудь знает, в чем может быть преимущество (кроме локальной отладки)?


person jma    schedule 19.04.2015    source источник


Ответы (1)


У меня такая же проблема и та же конфигурация, что и у вас, вы должны прочитать в консоли браузера.

Я получил:

Uncaught TypeError: $ is not a function
(anonymous function) @ init_tinymce.js:18
(anonymous function) @ init_tinymce.js:38

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));
+});

Также вы должны прокомментировать TINYMCE_COMPRESSOR = True или настроить его на False в setting.py.

TINYMCE_COMPRESSOR будет выдавать другие ошибки js, если он включен.

person Valentin Olaru    schedule 20.04.2015
comment
Хорошо, но у спрашивающего есть Django 1.8, вы упомянули в своем ответе 1.4-1.7. Есть ли что-то еще, что вы хотите добавить к ответу, чтобы сделать его более понятным? - person Cristik; 20.04.2015
comment
Как видно по ссылке, я сказал, что django_tinymce/init_tinymce.js сделан только для django версии 1.4-1.7. - person Valentin Olaru; 20.04.2015