Найти - Пользователи
Полная версия: Как можно подключить свой javascript в django админке ?
Начало » Django » Как можно подключить свой javascript в django админке ?
1 2
owlman
Lexander
А в какое место результирующей страницы выводится JavaScript?
Поддерживаю вопрос с дополнением:
Код JavaScript попадает в <head></head>? или куда? (Вопрос благодаря fashust снят)
И как быть если редактор нужен только в одном поле из модели, а TextField`сов несколько?
Lexander
Хреново…
Хоть код и красивый, но результат плохой.
fashust
owlman
Lexander
А в какое место результирующей страницы выводится JavaScript?
Поддерживаю вопрос с дополнением:
Код JavaScript попадает в <head></head>? или куда? (Вопрос благодаря fashust снят)
И как быть если редактор нужен только в одном поле из модели, а TextField`сов несколько?

Ну извращаться можно по разному в таком случае. С несколькими TextField-ами пока не приходилось сталкиваться, но добавлял некоторые плюшки на CharField-ы, и вроде как удобно было, django каждому input type=text присваивает id вида: id_FILED_NAME, а для Textfield обычно использую django-tinymce + filebrowser, так что там проблема с одним или несколькими решается легко.
Saturn
Главное что удалось подключить js файлы, а там уже просто можно дописать пару функций Jquery для нужного поля.
magnet85
owlman
И как быть если редактор нужен только в одном поле из модели, а TextField`сов несколько?
Можно написать своё поле с кастомным виджетом:
class WidgetWYSIWYG(Textarea):
    def __init__(self, *args, **kwargs):
        super(WidgetWYSIWYG, self).__init__(attrs={'class': 'wysiwygEditor'}, *args, **kwargs)
    class Media:
        js = (
            'admin/tinymce/jscripts/tiny_mce/tiny_mce.js',
            'admin/tinymce/jscripts/textareas.js',
            )
class WYSIWYGField(Field):
    def get_internal_type(self):
        return "TextField"
    def formfield(self, **kwargs):
        defaults = {'widget': WidgetWYSIWYG}
        defaults.update(kwargs)
        return super(WYSIWYGField, self).formfield(**defaults)
На примере TinyMCE:
В скрипте инициализации указывать:

mode : "specific_textareas",
editor_selector : "wysiwygEditor",
И в моделях указывать не TextField а WYSIWYGField.
owlman
magnet85
owlman
И как быть если редактор нужен только в одном поле из модели, а TextField`сов несколько?
Можно написать своё поле с кастомным виджетом:
class WidgetWYSIWYG(Textarea):
    def __init__(self, *args, **kwargs):
        super(WidgetWYSIWYG, self).__init__(attrs={'class': 'wysiwygEditor'}, *args, **kwargs)
    class Media:
        js = (
            'admin/tinymce/jscripts/tiny_mce/tiny_mce.js',
            'admin/tinymce/jscripts/textareas.js',
            )
class WYSIWYGField(Field):
    def get_internal_type(self):
        return "TextField"
    def formfield(self, **kwargs):
        defaults = {'widget': WidgetWYSIWYG}
        defaults.update(kwargs)
        return super(WYSIWYGField, self).formfield(**defaults)
На примере TinyMCE:
В скрипте инициализации указывать:

mode : "specific_textareas",
editor_selector : "wysiwygEditor",
И в моделях указывать не TextField а WYSIWYGField.

Хороший вариант. Спасибо.
Тем более, что универсален и можно будет использовать не только в админке.
lorien
Для tinymce существует готовое django-приложение: django-tinymce
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB