【问题标题】:Where is template context processor in Django 1.5?Django 1.5 中的模板上下文处理器在哪里?
【发布时间】:2013-03-05 00:04:14
【问题描述】:

它应该自动列在 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")

【问题讨论】:

  • 你发布的是模板上下文处理器列表

标签: django django-staticfiles


【解决方案1】:

在您的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,我不这么认为。该设置是默认设置,您无需对其进行编辑。另外,不要认为这是提供静态文件所必需的。
  • 谢谢。一个额外的问题。如果我想添加一个新的自定义上下文处理器,我可以以某种方式将其附加到默认上下文处理器,还是需要在我的 settings.py 上复制完整的上下文处理器配置?
  • 谢谢罗汉。很有用!
  • 谢谢。解释得很好。
【解决方案2】:

您可以通过跳转到 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'), ]

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-15
    • 2015-11-01
    • 2015-11-27
    • 2020-04-12
    • 2018-06-03
    • 2012-04-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多