我在context_processor中定义了一个函数,用于传递我的设置中的值以在模板中使用。那么正确的方法是什么,更重要的是有什么区别?
def baseurl(request):
return {'BASE_URL': settings.BASE_URL}
或
def baseurl(context):
return {'BASE_URL': settings.BASE_URL}
我一直使用第一个,但已经遇到了第二个
的几个例子答案 0 :(得分:2)
来自 django / template / context.py :
class RequestContext(Context):
"""
This subclass of template.Context automatically populates itself using
the processors defined in TEMPLATE_CONTEXT_PROCESSORS.
Additional processors can be specified as a list of callables
using the "processors" keyword argument.
"""
def __init__(self, request, dict_=None, processors=None, current_app=None,
use_l10n=None, use_tz=None):
Context.__init__(self, dict_, current_app=current_app,
use_l10n=use_l10n, use_tz=use_tz)
if processors is None:
processors = ()
else:
processors = tuple(processors)
for processor in get_standard_processors() + processors:
self.update(processor(request))
最后两行是最重要的。这意味着参数没有命名。因此,如何命名你的论点并不重要。
答案 1 :(得分:1)
你可以自由地称呼这个论点,但request
是最常见或最明确的。来自Django文档:https://docs.djangoproject.com/en/1.4/ref/templates/api/#writing-your-own-context-processors
上下文处理器有一个非常简单的接口:它只是一个Python函数,它接受一个参数,一个HttpRequest对象,并返回一个添加到模板上下文的字典。
虽然没有什么可以阻止你命名这个参数context
,但由于传递了一个HttpRequest对象,因此会产生误导。