问题很简单。
在我的每个视图中,我都需要以下代码:
def my_view(request, poll_id):
p = get_object_or_404(Poll, pk=poll_id)
# Some code...
return render(request, 'polls/detail.html', {
'poll': p
# The rest of the dict...
})
所以我认为使用context processors
是适当的情况。
但我不明白如何将poll_id
参数提供给我的上下文处理器函数。
非常感谢每一个建议。
答案 0 :(得分:2)
您最好使用TEMPLATE_CONTEXT_PROCESSORS
使用以下代码向您的任何应用添加一个文件custom_processors.py
:
def my_view(request):
p = Poll.objects.filter(pk=1)
# Some code...
return {'poll':p[0] if p else '',}
将其添加到settings.py
TEMPLATE_CONTEXT_PROCESSORS
,例如:
TEMPLATE_CONTEXT_PROCESSORS=(
...
'<appname>.custom_processors.my_view',
)
如果TEMPLATE_CONTEXT_PROCESSORS
中没有任何settings.py
变量,则导入并附加它:
from django.conf.global_settings import TEMPLATE_CONTEXT_PROCESSORS
TEMPLATE_CONTEXT_PROCESSORS += ('<appname>.custom_processors.my_view',)
现在,您可以在任何模板中使用{{poll}}
。
答案 1 :(得分:2)
这实际上并不适合使用上下文处理器。您可能会发现通用视图更适合。
答案 2 :(得分:1)
由于上下文处理器是“全局”运行的(你不直接调用它们,但是在处理完视图后它们会自动运行),我认为没有一种简单的方法可以做你想要的。< / p>
为什么不在视图中使用辅助函数?
的内容def get_poll(context, poll_pk):
context['poll'] = Poll.objects.get(pk=poll_pk)
然后在你看来:
def my_view(request):
conext = {}
# Some code...
get_poll(context, your_poll_id)
return render(...)
或者,根据您的网址格式,您可能会解析上下文处理器中的request.path
属性以找出您想要的ID,但这似乎是hackish,如果您更改了网址设计,它将会中断。