Hel*_*nar 61 python django django-templates
我有一个奇怪的问题,我想使用上下文处理器添加一个全局查询.这就是我通过以下方式做到的:
在我的应用程序中制作了processor.py:
from myproject.myapp.models import Foo
def foos(request):
return {'foos': Foo.objects.all()}
Run Code Online (Sandbox Code Playgroud)
在我的setting.py结束时我添加了这个:
TEMPLATE_CONTEXT_PROCESSORS = ('myapp.processor.foos',)
Run Code Online (Sandbox Code Playgroud)
最后我传递了我的观点:
def index_view(request):
return render_to_response('index.html', {}, context_instance=RequestContext(request))
Run Code Online (Sandbox Code Playgroud)
在我的index.html模板:
<select id="select_foo">
{% for foo in foos %}
<option value="/{{ foo.slug }}">{{ foo.name }}</option>
{% endfor %}
</select>
Run Code Online (Sandbox Code Playgroud)
最后我的网址:
(r'^$', 'myapp.views.index_view'),
Run Code Online (Sandbox Code Playgroud)
我的foos显示没有任何问题,但我的media_url和其他上下文已经消失.可能是什么问题
Gre*_*ner 178
您需要添加TEMPLATE_CONTEXT_PROCESSORS的默认值.但是,您可以通过以下方式将上下文处理器附加到默认值,而不是硬编码那些与特定版本的Django相关联的值.
from django.conf import global_settings
TEMPLATE_CONTEXT_PROCESSORS = global_settings.TEMPLATE_CONTEXT_PROCESSORS + (
"myapp.processor.foos",
)
Run Code Online (Sandbox Code Playgroud)
确保在元组中包含尾随逗号,以便Python将其识别为元组.
TM.*_*TM. 55
当你指定这个:
TEMPLATE_CONTEXT_PROCESSORS = ('myapp.processor.foos',)
Run Code Online (Sandbox Code Playgroud)
在您的设置文件中,您将覆盖Django的默认上下文处理器.要扩展列表,您需要在设置中包含默认列表:
TEMPLATE_CONTEXT_PROCESSORS = (
"django.core.context_processors.auth",
"django.core.context_processors.debug",
"django.core.context_processors.i18n",
"django.core.context_processors.media",
"myapp.processor.foos",
)
Run Code Online (Sandbox Code Playgroud)
注意,上面的设置是django 1.1的默认设置(加上你的处理器).
这对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",
"myapp.processor.foos", )
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
39030 次 |
最近记录: |