覆盖Django小部件的默认模板

12

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

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

在此输入图像描述或者

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

或模板项目目录:

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

所有的方法都不起作用,即使我按照文档和stackoverflow上的答案推荐的方法操作,它仍然从默认位置加载。

由于这些是通用的小部件模板,我更喜欢将它们放在模板项目目录中,但据我所了解,默认情况下小部件只在已安装的应用程序中搜索。


我也没有运气。 - justengel
1个回答

18

看起来这是Django 1.11的问题。

Django小部件模板覆盖不在项目模板目录中搜索。如何解决?

这有点让人烦恼。可以通过更改设置来解决。所以您的主站点必须具有这些设置。

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',
            ],
        },
    },
]

这看起来有点奇怪,但它可以工作。在 Django 2.x 上进行了测试。 - andilabs

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接