TinyMCE HTMLField и Django TextField не отображаются в рабочей среде - PullRequest
0 голосов
/ 11 июля 2020

Когда я захожу в свою Modelform в админке моего сервера разработки localhost, все поля отображаются нормально. Однако, как только я go передаюсь администратору своего веб-приложения в производстве, как HTMLField, так и TextField не показывают никаких полей ввода.

Если бы это был просто TinyMCE HTMLField это было бы менее запутанно, но наличие обычных ошибок TextField также странно.

Что я пропускаю?

urls.py

urlpatterns = [
    [...]
 
    # tinymce
    url(r'^tinymce/', include('tinymce.urls')),
]

settings.py

TINYMCE_DEFAULT_CONFIG = {
    'cleanup_on_startup': True,
    'custom_undo_redo_levels': 20,
    'width': 1200,
    'selector': 'textarea',
    'theme': 'modern',
    'plugins': '''
            textcolor save link image media preview codesample contextmenu
            table code lists fullscreen  insertdatetime  nonbreaking
            contextmenu directionality searchreplace wordcount visualblocks
            visualchars code fullscreen autolink lists  charmap print  hr
            anchor pagebreak
            ''',
    'toolbar1': '''
            fullscreen preview bold italic underline | fontselect,
            fontsizeselect  | forecolor backcolor | alignleft alignright |
            aligncenter alignjustify | indent outdent | bullist numlist table |
            | link image media | codesample |
            ''',
    'toolbar2': '''
            visualblocks visualchars |
            charmap hr pagebreak nonbreaking anchor |  code |
            ''',
    'contextmenu': 'formats | link image',
    'menubar': True,
    'statusbar': True,
}

forms.py

from django import forms
from tinymce import TinyMCE
from django.contrib.admin.widgets import AdminDateWidget
from .models import Post, Comment


class TinyMCEWidget(TinyMCE):
    def use_required_attribute(self, *args):
        return False


class PostForm(forms.ModelForm):
    # Add Tiny MCE Widget to Admin Interface
    content = forms.CharField(
        widget=TinyMCEWidget(
            attrs={'required': False, 'cols': 30, 'rows': 10}
        )
    ),
    # Add DateTime Picker Widget to Admin Interface
    publish_date = forms.DateField(widget=AdminDateWidget())

    class Meta:
        model = Post
        fields = ('title', 'overview', 'content', 'thumbnail',
        'categories', 'publish_date')

models.py

from django.db import models
from django.contrib.auth import get_user_model
from tinymce.models import HTMLField

# Post Model
class Post(models.Model):
    title = models.CharField(max_length=28, blank=False)
    stock_name = models.CharField(max_length=35, blank=False)
    stock_website = models.CharField(max_length=60, blank=False)
    overview = models.TextField(max_length=140, blank=False) # doesn't show up in production
    content = HTMLField() # doesn't show up in production
    [...]

Вот как это выглядит в производстве:

enter image description here

vs development having the very same code on each side:

введите описание изображения здесь

Ответы [ 2 ]

0 голосов
/ 12 июля 2020

После мучительной ночи я наконец его запустил.

Проверьте следующее:

  • TinyMCE v4.x не поддерживает тему modern, однако работает в разработке по любой причине

Поэтому, если вы используете v4.x, обязательно измените тему на silver соответственно, перезагрузите рабочий сервер, и он должен работать нормально:

TINYMCE_DEFAULT_CONFIG = {
    'cleanup_on_startup': True,
    'custom_undo_redo_levels': 20,
    'width': 1200,
    'selector': 'textarea',
    'theme': 'silver', # Magic here
    [...]
}

В качестве альтернативы, если вы хотите сохранить тему modern, вам необходимо перейти на v5.x

Если она все равно не работает, это, вероятно, из-за отсутствия stati c путь к файлам. Go вперед и убедитесь, что вы правильно определили его следующим образом:

TINYMCE_JS_URL = os.path.join(STATIC_URL, "tinymce/tinymce.min.js")
TINYMCE_JS_ROOT = os.path.join(STATIC_URL, "tinymce/")

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

Я до сих пор не знаю, почему было затронуто и обычное текстовое поле Django, но, вероятно, это как-то связано с настройками TinyMCE, странно.

0 голосов
/ 11 июля 2020

, поскольку поведение, похоже, проявляется только в среде production , возможно, вам нужно повторно запустить collectstatic command

(venev) $ python manage.py collectstatic 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...