gpt4 book ai didi

django - 为什么 'DIRS' 只有在 APP_DIRS 为 False 时才有效?

转载 作者:行者123 更新时间:2023-12-01 01:22:27 27 4
gpt4 key购买 nike

为什么 settings.py 中的 TEMPLATES 中的 'DIRS' 仅在 'APP_DIRS' 设置为 False 时才有效?

我试图加载一个自定义的 html 小部件,但是当抛出“TemplateDoesNotExist”时,改变“DIRS”并没有改变“Template-loader postmortem”。当我将 'APP_DIRS' 设置为 False 时,'DIRS' 设置突然生效。

我试图搜索类似的问题,但没有找到答案。我也浏览了文档,但是关于 DIRS 和 APP_DIRS 的段落都没有提到一个工作,而另一个没有。

示例 1:

TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates'), '/Users/jonas/Documents/jobb/dynamicSurvey/survey/templates/django/forms/widgets'],
'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 尝试按以下顺序加载这些模板:

使用引擎 Django:
django.template.loaders.filesystem.Loader: /Users/jonas/venv/lib/python3.6/site-packages/django/forms/templates/horizontal_select.html (Source does not exist)
django.template.loaders.app_directories.Loader: /Users/jonas/venv/lib/python3.6/site-packages/nested_admin/templates/horizontal_select.html (Source does not exist)
django.template.loaders.app_directories.Loader: /Users/jonas/venv/lib/python3.6/site-packages/django/contrib/admin/templates/horizontal_select.html (Source does not exist)
django.template.loaders.app_directories.Loader: /Users/jonas/venv/lib/python3.6/site-packages/django/contrib/auth/templates/horizontal_select.html (Source does not exist)
django.template.loaders.app_directories.Loader: /Users/jonas/Documents/jobb/dynamicSurvey/survey/templates/horizontal_select.html (Source does not exist)
django.template.loaders.app_directories.Loader: /Users/jonas/venv/lib/python3.6/site-packages/tellme/templates/horizontal_select.html (Source does not exist)
django.template.loaders.app_directories.Loader: /Users/jonas/venv/lib/python3.6/site-packages/tinymce/templates/horizontal_select.html (Source does not exist)
django.template.loaders.app_directories.Loader: /Users/jonas/venv/lib/python3.6/site-packages/django/forms/templates/horizontal_select.html (Source does not exist)

示例 2:
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates'), '/Users/jonas/Documents/jobb/dynamicSurvey/survey/templates/django/forms/widgets'],
'APP_DIRS': False,
'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 尝试按以下顺序加载这些模板:

使用引擎 Django:
django.template.loaders.filesystem.Loader: /Users/jonas/Documents/jobb/dynamicSurvey/templates/survey/survey_detail.html (Source does not exist)
django.template.loaders.filesystem.Loader: /Users/jonas/Documents/jobb/dynamicSurvey/survey/templates/django/forms/widgets/survey/survey_detail.html (Source does not exist)

如果我正确理解了“引擎 django”,那么示例 2 的最后一行 ('django.template.loaders.filesystem.Loader:/Users/jonas/Documents/jobb/dynamicSurvey/survey/templates/django/forms/widgets/survey/') 也应该在示例 1 中查找,如果 DIRS 设置有效果。

我是 Stack 的新手,所以请随时批评我的问题。

最佳答案

更改您的 FORM_RENDERER设置使用 TemplatesSetting 渲染器。它将使用您的 TEMPLATES 中的配置环境。

FORM_RENDERER = 'django.forms.renderers.TemplatesSetting'

正如文档所建议的,我会设置 'APP_DIRS'True再次添加 django.forms给您的 INSTALLED_APPS以便 Django 可以找到默认模板。

关于django - 为什么 'DIRS' 只有在 APP_DIRS 为 False 时才有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45607140/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com