Django 1.5中的模板上下文处理器在哪里?

22

它是否应该自动列在Settings.py中,还是我需要添加它?我在开发环境中难以提供图像文件,文档对我来说过于简洁,并且某些原因没有清楚地向我解释。 我想检查一下我的template_context_processors在哪里,但它在哪里?它不在我的settings.py文件中。我通常需要编辑这个吗?

("django.contrib.auth.context_processors.auth",
"django.core.context_processors.debug",
"django.core.context_processors.i18n",
"django.core.context_processors.media",
"django.core.context_processors.static",
"django.contrib.messages.context_processors.messages")

你所发布的是模板上下文处理器列表。 - catherine
2个回答

45

settings.py 文件中,您可以定义 TEMPLATE_CONTEXT_PROCESSORS 设置。

然而,Django 已经为这个设置定义了默认值,即

("django.contrib.auth.context_processors.auth",
"django.core.context_processors.debug",
"django.core.context_processors.i18n",
"django.core.context_processors.media",
"django.core.context_processors.static",
"django.core.context_processors.tz",
"django.contrib.messages.context_processors.messages")

如果您想添加自定义模板上下文处理器并保留默认处理器,则可以在settings.py中执行以下操作:

import django.conf.global_settings as DEFAULT_SETTINGS

TEMPLATE_CONTEXT_PROCESSORS = DEFAULT_SETTINGS.TEMPLATE_CONTEXT_PROCESSORS + (
    'custom_context_processors.my_context_processor',
)

请参考TEMPLATE_CONTEXT_PROCESSORS文档。


非常感谢。我创建了一个新的Django项目,但在自动生成的settings.py文件中没有看到TEMPLATE_CONTEXT_PROCESSORS预填充。为了提供静态文件,我需要复制粘贴上述内容吗?还是我走错了路线? - user798719
@user798719,我不这么认为。该设置是默认的,您无需编辑它。此外,不认为这是提供静态文件所必需的。 - Rohan
谢谢。还有一个问题。如果我想添加一个新的自定义上下文处理器,我可以以某种方式将其附加到默认上下文处理器中吗?还是我需要在我的settings.py中复制整个上下文处理器配置? - Miquel
谢谢。讲解得很清楚。 - Frankline

3

您可以通过进入 Django Python Shell 并导入您的设置来检查应用程序正在使用哪些上下文处理器。

$ manage.py shell
> from django.conf import settings
> settings.TEMPLATE_CONTEXT_PROCESSORS

如果您没有覆盖它们,那么默认值应该被呈现。

对于静态文件,请检查STATICFILES_DIRS,这是django开发服务器查找要提供的静态资源的位置:https://docs.djangoproject.com/en/dev/ref/settings/#std:setting-STATICFILES_DIRS.

我在我的settings.py中使用了这个:

from os.path import join, abspath
PROJECT_ROOT = abspath(join(dirname(__file__), '..', '..'))
STATICFILES_DIRS = [join(PROJECT_ROOT, 'public'), ]

这对你来说可能不一样,因为它取决于你如何布置你的项目。

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