【问题标题】:Django FORM_RENDERER for frontend onlyDjango FORM_RENDERER 仅用于前端
【发布时间】:2022-10-20 05:48:29
【问题描述】:

默认情况下,Django 使用此设置来确定表单小部件的来源:

FORM_RENDERER = 'django.forms.renderers.DjangoTemplates'

由于我们希望删除所有标签并应用一些覆盖,因此将其更改为:

FORM_RENDERER = 'django.forms.renderers.TemplatesSetting'

这一切都适用于前端。但是,它使后端无法使用,因为现在所有标签也都被删除了。

我的问题是,如何让 Django 使用管理员的原始设置?

【问题讨论】:

    标签: django django-templates django-admin django-settings


    【解决方案1】:

    看来您不能拆分前端和后端。最后,我最终创建了在前端使用的自定义表单/小部件类。

    步骤是:

    1. 在模板文件夹中保留 Django 表单的原始副本
    2. 在您自己的模板文件夹中创建您需要的每个小部件模板的副本
    3. 创建一个覆盖模板名称的自定义表单类在里面强制使用您的自定义模板。这个formclass可以被视为一个混合。

    【讨论】:

      【解决方案2】:

      不确定这是否有帮助,但您可能想考虑将 django 模板目录添加到设置中的 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 添加到元素的方法。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-08-09
        • 1970-01-01
        • 1970-01-01
        • 2012-02-23
        • 2018-11-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多