您的位置:

django报错ImproperlyConfigured("Template engine aliases aren't unique, duplicates: {}. ""Set a unique NAME for each engine in settings.TEMPLATES.".format(", ".join(duplicates)))怎么办

  发布时间:2023-04-05 09:14:10
报错的原因这个错误是由于在 Django 的设置中 TEMPLATES 字典中定义了重复的模板引擎别名导致的。Django 无法确定使用哪个模板引擎来渲染模板,因此抛出了这个错误。如何解决解决方法是在 settings.py 文件中 TEMPLATES 字典中给每个模板引擎定义一个唯一的 NAME。

报错的原因

这个错误是由于在 Django 的设置中 TEMPLATES 字典中定义了重复的模板引擎别名导致的。 Django 无法确定使用哪个模板引擎来渲染模板,因此抛出了这个错误。解决方法就是在settings.py 中 TEMPLATES 字典中给每个模板引擎定义一个唯一的NAME。

如何解决

解决方法是在 settings.py 文件中 TEMPLATES 字典中给每个模板引擎定义一个唯一的 NAME。

例如:


TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [],
        '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',
            ],
            'builtins': [
                'django.templatetags.i18n',
            ],
            'loaders': [
                ('django.template.loaders.cached.Loader', [
                    'django.template.loaders.filesystem.Loader',
                    'django.template.loaders.app_directories.Loader',
                ]),
            ],
        },
        'NAME': 'django_templates',
    },
    {
        'BACKEND': 'django.template.backends.jinja2.Jinja2',
        'DIRS': [],
        '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',
            ],
        },
        'NAME': 'jinja2_templates',
    },
]

在这个例子中,我们给 Django 默认的模板引擎定义了 'django_templates',并给 Jinja2 定义了 'jinja2_templates' 作为别名。

使用例子

是的, 下面是一个简单的例子:


TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [],
        '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',
            ],
        },
        'NAME': 'django_templates',  # <-- 设置唯一的名称
    },
    {
        'BACKEND': 'django.template.backends.jinja2.Jinja2',
        'DIRS': [],
        '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',
            ],
        },
        'NAME': 'jinja2_templates',  # <-- 设置唯一的名称
    },
]

这样就可以避免重复的别名了。

需要注意的是,如果您正在使用自定义模板引擎,也需要在 TEMPLATES 字典中为它们设置唯一的 NAME。