覆盖Django小部件的默认模板

时间:2018-01-12 12:28:39

标签: django django-templates django-widget

我想覆盖Django(2.01)小部件模板,因为我需要为每个输入,标签添加类,并以不同的方式定位它们

app
 - templates
 - app 
    - django
       - forms
           - widgets
             - input.html

enter image description here

app
 - templates
   - django
      - forms
          - widgets
             - input.html

或模板项目目录:

- templates
   - django
      - forms
          - widgets
             - input.html

它们都不起作用(即使我这是在文档中推荐的方式,也是我在stackoverflow上看到的答案),它仍然会默认加载。

作为通用窗口小部件模板,我更喜欢将它们放在模板项目目录中,但是我默认情况下只是在已安装的应用程序中搜索窗口小部件。

1 个答案:

答案 0 :(得分:10)

看起来这是Django 1.11中的一个问题。

Django widget template override does not search in the project template directory. How to fix?

这有点烦人。通过更改您的设置来修复它。因此,您的主站点必须具有这些设置。

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

FORM_RENDERER = 'django.forms.renderers.TemplatesSetting'

很遗憾,您无法通过已安装的某个应用自动执行此操作。如果已安装的应用程序覆盖了django模板小部件,则需要对其进行记录,并且用户必须在其站点设置中添加此代码。

你不需要改变" TEMPLATES"设置。以下是我的TEMPLATES的参考资料。

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, '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',
            ],
        },
    },
]