add: админка (13) CodeMirror в админке настроен и работает...
This commit is contained in:
@@ -223,7 +223,8 @@ class TbHypn0ItemAdmin(admin.ModelAdmin):
|
|||||||
)
|
)
|
||||||
return "Нет файла"
|
return "Нет файла"
|
||||||
|
|
||||||
|
# ----
|
||||||
|
# АДМИНКА ЛАЙКОВ/ДИСЛАЙКОВ
|
||||||
@admin.register(TbVote)
|
@admin.register(TbVote)
|
||||||
class TbVoteAdmin(admin.ModelAdmin):
|
class TbVoteAdmin(admin.ModelAdmin):
|
||||||
"""
|
"""
|
||||||
@@ -246,11 +247,100 @@ class TbVoteAdmin(admin.ModelAdmin):
|
|||||||
return f"{obj.s_fingerprint[:12]}..."
|
return f"{obj.s_fingerprint[:12]}..."
|
||||||
|
|
||||||
|
|
||||||
|
# ----
|
||||||
|
# АДМИНКА БЛОГА
|
||||||
|
# Кастомная форма
|
||||||
|
class BlogPostAdminForm(CodeMirrorFormMixin):
|
||||||
|
"""
|
||||||
|
Кастомная форма для админки потов в блог (TbBlogPost).
|
||||||
|
Добавляет виджеты CodeMirror для текстовых полей.
|
||||||
|
"""
|
||||||
|
# Виртуальные поля для настройки типографа
|
||||||
|
etp_enable = forms.BooleanField(
|
||||||
|
label="Включить типограф",
|
||||||
|
initial=False,
|
||||||
|
required=False,
|
||||||
|
help_text="Включить автоматическую типографику для HTML полей (заголовок, тизер, контент) "
|
||||||
|
)
|
||||||
|
etp_language = forms.ChoiceField(
|
||||||
|
label="Язык типографики",
|
||||||
|
choices=[('ru', 'Русский'), ('en', 'English'), ('ru,en', 'Ru + En')],
|
||||||
|
initial='ru',
|
||||||
|
required=False
|
||||||
|
)
|
||||||
|
etp_quotes = forms.BooleanField(
|
||||||
|
label="Кавычки",
|
||||||
|
initial=True,
|
||||||
|
required=False,
|
||||||
|
help_text="Заменять кавычки<br/>(«ёлочки» для русского, “лапки” для английского) "
|
||||||
|
)
|
||||||
|
etp_hyphenation = forms.BooleanField(
|
||||||
|
label="Расставлять переносы",
|
||||||
|
initial=True,
|
||||||
|
required=False,
|
||||||
|
help_text="Расставлять мягкие переносы (&shy;) <br/>"
|
||||||
|
"в словах длиннее <b>14</b> символов "
|
||||||
|
)
|
||||||
|
etp_sanitize = forms.BooleanField(
|
||||||
|
label="Очистка HTML",
|
||||||
|
initial=False,
|
||||||
|
required=False,
|
||||||
|
help_text="Удалять весь HTML из исходного текста "
|
||||||
|
)
|
||||||
|
etp_hanging_punctuation = forms.BooleanField(
|
||||||
|
label="Висячая пунктуация",
|
||||||
|
initial=False,
|
||||||
|
required=False,
|
||||||
|
help_text="Выносить пунктуацию в начало строк<br/> "
|
||||||
|
"(только для заголовков... для тизера и контента отключается автоматически) "
|
||||||
|
)
|
||||||
|
etp_mode = forms.ChoiceField(
|
||||||
|
label="Режим вывода",
|
||||||
|
choices=[('mixed', 'Смешанный (Mixed)'), ('unicode', 'Юникод (Unicode)'), ('mnemonic', 'Мнемоники')],
|
||||||
|
initial='mixed',
|
||||||
|
required=False,
|
||||||
|
help_text="Формат спецсимволов (например, кавычек, тире, многоточий) в HTML: смешанный, юникод"
|
||||||
|
" или мнемоники "
|
||||||
|
)
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
model = TbBlogPost
|
||||||
|
fields = (
|
||||||
|
# Виртуальные поля для настройки типографа
|
||||||
|
'etp_enable', 'etp_language', 'etp_quotes', 'etp_hyphenation', 'etp_sanitize',
|
||||||
|
'etp_hanging_punctuation', 'etp_mode',
|
||||||
|
# Остальные поля модели TbArticle
|
||||||
|
's_title', 'slug', 's_teaser', 's_content', 'f_cover_img',
|
||||||
|
'is_published', 'd_published_at',
|
||||||
|
)
|
||||||
|
|
||||||
|
def __init__(self, *args, **kwargs):
|
||||||
|
"""
|
||||||
|
При инициализации формы подгружаем CodeMirror редактор.
|
||||||
|
Получаем request из kwargs, переданных из get_form_kwargs в AdminClass.
|
||||||
|
"""
|
||||||
|
# Извлекаем request из kwargs если он есть
|
||||||
|
self.request = kwargs.pop('request', None)
|
||||||
|
|
||||||
|
super().__init__(*args, **kwargs)
|
||||||
|
|
||||||
|
# Конфигурируем поля для CodeMirror
|
||||||
|
self.setup_codemirror_field('s_title', language='text',
|
||||||
|
css_class='codemirror-width-l codemirror-no-lines')
|
||||||
|
self.setup_codemirror_field('slug', language='text',
|
||||||
|
css_class='codemirror-width-l codemirror-no-lines')
|
||||||
|
self.setup_codemirror_field('s_teaser', language='html',
|
||||||
|
css_class='codemirror-width-l codemirror-min-height-5')
|
||||||
|
self.setup_codemirror_field('s_content', language='html',
|
||||||
|
css_class='codemirror-width-xl codemirror-min-height-10')
|
||||||
|
|
||||||
@admin.register(TbBlogPost)
|
@admin.register(TbBlogPost)
|
||||||
class TbBlogPostAdmin(admin.ModelAdmin):
|
class TbBlogPostAdmin(RequestInFormMixin, admin.ModelAdmin):
|
||||||
"""
|
"""
|
||||||
Управление статьями блога, документацией и инфо-страницами (HTML + etpgrf).
|
Управление статьями блога, документацией и инфо-страницами (HTML + etpgrf).
|
||||||
"""
|
"""
|
||||||
|
form = BlogPostAdminForm
|
||||||
|
|
||||||
list_display = ("id", "s_title_display", "slug", "is_published", "d_published_at", "d_created_at")
|
list_display = ("id", "s_title_display", "slug", "is_published", "d_published_at", "d_created_at")
|
||||||
list_display_links = ("id", "s_title_display")
|
list_display_links = ("id", "s_title_display")
|
||||||
list_filter = ("is_published", "d_published_at", "d_created_at")
|
list_filter = ("is_published", "d_published_at", "d_created_at")
|
||||||
|
|||||||
Reference in New Issue
Block a user