Задать вопрос
Ответы пользователя по тегу Django
  • Какой wysiwyg редактор внедрить в Django 1.8?

    @Pauchenkov Автор вопроса
    Начинающий программист Django
    Всем добрый вечер! Наконец-то удалось подключит wysiwyg редактор. Хочу поделиться на будущее с теми, кто еще этим не занимался :) Может кому и пригодится.
    Значит подключил я ckeditor так:
    1) Устанавливаем django-ckeditor этой командой: pip install django-ckeditor
    2) Вносим ckeditor в список INSTALLED_APPS
    INSTALLED_APPS = (
        ................. ,
        'ckeditor',
    )

    3) Настраиваем MEDIA_ROOT, MEDIA_URL, STATIC_ROOT, STATIC_URL, STATIC_DIRS, STATICFILES_FINDERS
    после строчки import os, если вдруг у Вас не задано, пропишите путь базовой директории
    BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
    , но если у Вас прописано значение по-другому - советую эту (существующую) строчку не трогать, а просто под ней добавить еще одну, назвав не BASE_DIR, а по-другому (например: _PATH).

    Задаем MEDIA_ROOT и MEDIA_URL:
    MEDIA_ROOT = os.path.join(BASE_DIR, 'static', 'media')
    MEDIA_URL = '/media/'


    Задаем STATIC_ROOT, STATIC_URL, STATICFILES_DIRS и STATICFILES_FINDERS:
    STATIC_ROOT = os.path.join(BASE_DIR, 'static')
    STATIC_URL = '/statics/'
    STATICFILES_DIRS = (
        os.path.join(BASE_DIR, 'statics'),
    )
    STATICFILES_FINDERS = (
        'django.contrib.staticfiles.finders.FileSystemFinder',
        'django.contrib.staticfiles.finders.AppDirectoriesFinder',
    )


    4) Задаем пути и настройки CKEDITOR, а именно: CKEDITOR_UPLOAD_PATH, CKEDITOR_IMAGE_BACKEND, CKEDITOR_JQUERY_URL, CKEDITOR_CONFIGS

    CKEDITOR_UPLOAD_PATH = "uploads/"
    CKEDITOR_IMAGE_BACKEND = "pillow"
    CKEDITOR_JQUERY_URL = '//ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js'
    
    # CKEDITOR_CONFIGS по сути необязательны. Они влияют на тулбар редактора. Если выключите - будет очень мало инструментов для работы с текстом. После полной настройки - попробуйте с ними поиграться. Возможно найдете для себя какой-то более оптимальный вариант настроек!
    CKEDITOR_CONFIGS = {
        "default": {
            "removePlugins": "stylesheetparser",
            'allowedContent': True,
            'toolbar_Full': [
            ['Styles', 'Format', 'Bold', 'Italic', 'Underline', 'Strike', 'Subscript', 'Superscript', '-', 'RemoveFormat' ],
            ['Image', 'Flash', 'Table', 'HorizontalRule'],
            ['TextColor', 'BGColor'],
            ['Smiley','sourcearea', 'SpecialChar'],
            [ 'Link', 'Unlink', 'Anchor' ],
            [ 'NumberedList', 'BulletedList', '-', 'Outdent', 'Indent', '-', 'Blockquote', 'CreateDiv', '-', 'JustifyLeft', 'JustifyCenter', 'JustifyRight', 'JustifyBlock', '-', 'BidiLtr', 'BidiRtl', 'Language' ],
            [ 'Source', '-', 'Save', 'NewPage', 'Preview', 'Print', '-', 'Templates' ],
            [ 'Cut', 'Copy', 'Paste', 'PasteText', 'PasteFromWord', '-', 'Undo', 'Redo' ],
            [ 'Find', 'Replace', '-', 'SelectAll', '-', 'Scayt' ],
            [ 'Maximize', 'ShowBlocks' ]
        ],
        }
    }


    5) Настраиваем URL'ы
    Сначала я объясняю, а в конце выложу ПОЛНЫЙ ВАРИАНТ, что бы все было наглядно видно!
    В файле urls.py прописываем url ckeditor'a:
    ............. ,
    url(r'^ckeditor/', include('ckeditor.urls')),

    и добавляем после скобки, закрывающей urlpatterns вот это:
    + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)


    Вот ПОЛНЫЙ ВАРИАНТ:
    urlpatterns = [
    ............... ,
    url(r'^ckeditor/', include('ckeditor.urls')),
    ] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

    6) ОБЯЗАТЕЛЬНО ВЫПОЛНЯЕМ collectstatic!!!

    В терминале вводим: python manage.py collectstatic

    После подтверждаем, введя yes!

    7) В фале моделей (models.py) мы должны сначала совершить ипорт:
    from ckeditor.fields import RichTextField

    8) Осталось маленько. Теперь, что бы у Вас в админке у поля появился WYSIWYG-редактор нужно заместо models.CharField (TextField и других полей) вручную указать RichTextField.

    Вот пример, как должно быть:
    title_story = RichTextField(max_length=255, verbose_name="Название")
    anons = RichTextField(max_length=1000, null=True, blank=True, verbose_name="Анонс")
    story = RichTextField(verbose_name="Полная статья")
    ... ну и так далее ....
    Ответ написан
    Комментировать
  • Как выбрать данные из бд в самом шаблоне джанго? Или как правильнее сделать?

    @Pauchenkov Автор вопроса
    Начинающий программист Django
    Вот мой способ решения, может быть кому-то пригодится.
    ВСЕ ЗАДЕЙСТВОВАННЫЕ ПРИЛОЖЕНИЯ ДОЛЖНЫ БЫТЬ ПОДКЛЮЧЕНЫ!
    Проблема решилась написанием кастомного тега (собственного тега) в django 1.8.2!
    Делал я вот так:
    1) Создаем в папке с ПРИЛОЖЕНИЕ (АППОМ, ну т.е. в той папке, которая создалась при выполнении команды startapp) папку templatetags.
    2) В папке templatetags создаем:
    а) Пустой файл __init__.py (файл, который ставит в известность Python, что эта директория является модулем Python)
    б) Файл с названием нашего нового тега (в моем случе он называется sidebar.py). В этом файле будет происходить некая обработка! В моем случае: регистрация тега, выборка из БД и возврат контекста.
    3) Открываем наш только что созданный файл sidebar.py и пишем:

    from django import template
    
    from blog.models import RightSidebarWidgets #Импортируем нужные нам модели.
    
    # экземпляр класса, в котором все наши теги будут зарегистрированы
    register = template.Library()
    
    # регистрируем наш тег, который будет выводить шаблон right_sidebar.html
    @register.inclusion_tag("blog/right_sidebar.html") #В кавычках вводите путь до шаблона! он может быть у каждого свой!
    
    # Создаем сам тег!
    def show_sidebar():
    	widgets = RightSidebarWidgets.objects.all() # Делаем выборку из БД
    	return {'widgets': widgets} # Возвращаем контекст


    Далее в том файле где должен быть подключен наш зарегистрированный тег и его шаблон пишем:
    • В начале файла пишем: {% load sidebar %} # Где sidebar - Название нашего файла тега, находящегося в папке templatetags, но только без расширения!
    • И в том месте где должен быть выведен наш шаблон пишем: {% show_sidebar %} # Где show_sidebar - Название нашего тега описанного и зарегистрированного в файле sidebar.py, который в свою очередь, лежит в папке templatetags

    Вот собственно и все. Таким способом я решил проблему. Если вдруг у Вас не работает тег - проверьте его на ошибки и если в теге у Вас нет ошибок и Вы в этом уверены, то
    Стоит проверить, что:
    — в директории templatetags есть файл __init_.py
    — приложение добавлено в INSTALLED_APPS
    — если шаблонный тег приложения myapp вызывается из шаблона приложения otherapp, то в INSTALLED_APPS ‘myapp’ должно быть левее (выше) ‘otherapp’
    — установлены все зависимости, необходимые в myapp_tags.py
    — убедиться, что возможно импортировать сам myapp_tags.py
    python manage.py shell
    >>> from myapp.templatetags import myapp_tags

    — сервер перезагружен после последнего изменения кода
    ---
    Всем спасибо и удачи!
    Ответ написан
    Комментировать