首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Django,模板上下文处理器

Django,模板上下文处理器
EN

Stack Overflow用户
提问于 2010-02-12 02:34:04
回答 2查看 40.8K关注 0票数 61

我有一个奇怪的问题,我想添加一个使用上下文处理器的全局查询。这就是我在following中做的事情

在我的应用程序中创建了一个processor.py:

代码语言:javascript
复制
from myproject.myapp.models import Foo

def foos(request):
    return {'foos': Foo.objects.all()}

在我的setting.py末尾,我添加了以下内容:

代码语言:javascript
复制
TEMPLATE_CONTEXT_PROCESSORS = ('myapp.processor.foos',)

最后,我将我的观点如下:

代码语言:javascript
复制
def index_view(request):

    return render_to_response('index.html', {}, context_instance=RequestContext(request))

在我的index.html模板中:

代码语言:javascript
复制
<select id="select_foo">
{% for foo in foos %}
    <option value="/{{ foo.slug }}">{{ foo.name }}</option>
{% endfor %}
</select>

最后是我的url:

代码语言:javascript
复制
(r'^$', 'myapp.views.index_view'),

我的foos显示没有任何问题,但是我的media_url和其他上下文都消失了。可能的问题是什么

EN

回答 2

Stack Overflow用户

发布于 2012-02-11 03:02:22

您需要添加TEMPLATE_CONTEXT_PROCESSORS的默认值。但是,您可以通过以下方式将上下文处理器附加到默认值,而不是对这些值进行硬编码,这将绑定到特定版本的Django:

代码语言:javascript
复制
from django.conf import global_settings
TEMPLATE_CONTEXT_PROCESSORS = global_settings.TEMPLATE_CONTEXT_PROCESSORS + (
    "myapp.processor.foos",
)

确保在元组中包含尾随的逗号,以便Python将其识别为元组。

票数 179
EN

Stack Overflow用户

发布于 2011-06-19 19:38:27

下面是在Django 1.3中对我有效的方法

代码语言:javascript
复制
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",
    "myapp.processor.foos", )
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2246725

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档