Django FORM_RENDERER только для фронтенда

По умолчанию Django использует эту настройку для определения того, откуда берутся виджеты формы:

FORM_RENDERER = 'django.forms.renderers.DjangoTemplates'

Поскольку мы хотим удалить все метки и применить некоторые переопределения, он был изменен на:

FORM_RENDERER = 'django.forms.renderers.TemplatesSetting'

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

Мой вопрос, как мне заставить Django использовать оригинальные настройки для администратора?

Похоже, что вы не можете разделить фронтенд и бэкенд. В итоге я создал пользовательские классы форм/виджетов, которые я использую во фронтенде.

Шаги были следующие:

  1. Сохраните оригинальную копию форм Django в вашей папке с шаблонами
  2. Создайте дубликат каждого шаблона виджета, который вам нужен, в вашей собственной папке шаблонов
  3. .
  4. Создайте пользовательский класс формы, который переопределяет имя_шаблона в init для принудительного использования ваших пользовательских шаблонов. Этот класс формы можно рассматривать как смешивание.

Не уверен, что это может помочь, но вы можете попробовать добавить django templates dir к вашим TEMPLATES в настройках:

import django

INSTALLED_APPS = [
...
'django.forms',
...]

FORM_RENDERER = 'django.forms.renderers.TemplatesSetting'
TEMPLATE_DIR = os.path.join(APPS_DIR, "templates")  # ROOT dir for templates
TEMPLATES = [
{
    'BACKEND': 'django.template.backends.django.DjangoTemplates',
    'DIRS': [TEMPLATE_DIR, django.__path__[0] + '/forms/templates'],
    'APP_DIRS': True,
    'OPTIONS': {
        'context_processors': [
            'django.template.context_processors.debug',
            'django.template.context_processors.request',
            'django.contrib.auth.context_processors.auth',
            'django.contrib.messages.context_processors.messages',
        ],
    },
},
]

Это позволяет мне иметь свой собственный шаблон в моей ModelForm следующим образом:

class DealerDepartmentFrom(forms.ModelForm):
    error_css_class = "is-invalid"
    template_name = "form_templates/custom_form_template.html"

Причина, по которой я спустился в эту кроличью нору, заключалась в том, чтобы найти способ добавить класс error_css_class к элементу.

Вернуться на верх