【发布时间】:2012-04-06 09:27:20
【问题描述】:
在 Django 中编写线程安全上下文处理器的最佳实践是什么?
说,我想将一些变量传递给模板,这 在相应的视图中设置,并且对于 不同的视图-模板对。
一种解决方案是手动传递上下文中的每个变量:
return render_to_response('template.html', {'var1':var1,... 'var10':var10},
context_instance=RequestContext(request))
但是,为了保持 DRY,我宁愿使用上下文处理器。但是我 担心线程安全,因为它似乎需要全局存储。 这是我使用上下文处理器的解决方案,它将每个 可变的请求。感谢您的 cmets 和建议。
在context_processor.py:
store = {}
def add_context(request, key, value):
if request not in store:
store[request] = {}
store[request][key] = value
return
def misc_context_processor(request):
return store.pop(request,{})
在views.py:
import context_processor
def view(request):
...
if x == y:
context_processor.add_context(request,'var1','value1')
else:
context_processor.add_context(request,'var2','value2')
...
return render_to_response('template.html', {},
context_instance=RequestContext(request))
在settings.py:
TEMPLATE_CONTEXT_PROCESSORS = (
'django.core.context_processors.request',
'django.core.context_processors.debug',
'django.core.context_processors.i18n',
...,
'appname.context_processor.misc_context_processor',
)
【问题讨论】:
标签: django django-templates thread-safety django-context