Django FORM_RENDERER только для фронтенда
По умолчанию Django использует эту настройку для определения того, откуда берутся виджеты формы:
FORM_RENDERER = 'django.forms.renderers.DjangoTemplates'
Поскольку мы хотим удалить все метки и применить некоторые переопределения, он был изменен на:
FORM_RENDERER = 'django.forms.renderers.TemplatesSetting'
Все это прекрасно работает для фронтенда. Однако это делает бэкенд непригодным для использования, так как теперь все метки удаляются и там.
Мой вопрос, как мне заставить Django использовать оригинальные настройки для администратора?
Похоже, что вы не можете разделить фронтенд и бэкенд. В итоге я создал пользовательские классы форм/виджетов, которые я использую во фронтенде.
Шаги были следующие:
- Сохраните оригинальную копию форм Django в вашей папке с шаблонами
- Создайте дубликат каждого шаблона виджета, который вам нужен, в вашей собственной папке шаблонов .
- Создайте пользовательский класс формы, который переопределяет имя_шаблона в 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 к элементу.