Django - 模板上下文处理器 - 破坏我的应用程序

Posted

技术标签:

【中文标题】Django - 模板上下文处理器 - 破坏我的应用程序【英文标题】:Django - template context processors - breaking my app 【发布时间】:2011-08-31 06:09:51 【问题描述】:

我试图设置一个模板上下文处理器,如this article mentions,以便我可以为每个模板提供信息。

我在views.py中写了这个函数:

def items_in_cart(request):
    """Used by settings.TEMPLATE_CONTEXT_PROCESSORS to provide an item count
    to every template"""
    cart, lines = get_users_cart_and_lines(request)
    return 'items_in_cart': lines.count()

然后我在 settings.py 中添加了这一行:

TEMPLATE_CONTEXT_PROCESSORS = ('Store.views.items_in_cart',)

但是现在每当我转到任何页面时都会收到此错误:

ImproperlyConfigured at /

Put 'django.contrib.auth.context_processors.auth' in your TEMPLATE_CONTEXT_PROCESSORS setting in order to use the admin application.

我做错了吗?这里发生了什么?我尝试按照错误所说的去做,然后它会呈现一个页面,其中我的所有样式表和图像都丢失了。

【问题讨论】:

【参考方案1】:

Django 有一组默认的 TEMPLATE_CONTEXT_PROCESSORS,您需要在添加自己的时手动添加。 http://docs.djangoproject.com/en/1.3/ref/settings/#template-context-processors

根据您的 Django 版本,这些是不同的,但是如果使用 Django 1.3,您可能会遇到以下情况

TEMPLATE_CONTEXT_PROCESSORS = (
    "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",
    "Store.views.items_in_cart",
)

【讨论】:

嗯,我可以将我的添加到现有的默认列表中吗?例如,TEMPLATE_CONTEXT_PROCESSORS = secret_default_location.TEMPLATE_CONTEXT_PROCESSORS + ('Store.views.items_in_cart',) 您应该能够使用 TEMPLATE_CONTEXT_PROCESSORS += ('Store.views.items_in_cart',) 附加到默认值 可以使用from django.conf.global_settings import TEMPLATE_CONTEXT_PROCESSORS 导入默认的 django 设置以追加。然后,您可以使用 TEMPLATE_CONTEXT_PROCESSORS += ('Store.views.items_in_cart',) 附加到此 在 Django 1.10 中,该值已从 global_settings 中删除,应使用新的 TEMPLATES 设置。应该如何迁移上面添加到默认设置的代码?是否应该手动包含它们?甚至还有默认值吗?

以上是关于Django - 模板上下文处理器 - 破坏我的应用程序的主要内容,如果未能解决你的问题,请参考以下文章

Django 模板破坏 DataTable

在 django 中使用上下文处理器流式处理模板上下文

在不使用上下文处理器的情况下访问 django 1.7 模板中的 URL 参数

我可以在 django 模板上下文处理器中访问 url kwargs 吗?

Django 动态网址

处理 django 包含模板标签中的请求