Django:使用请求和上下文作为参数有什么区别

时间:2013-02-08 12:48:37

标签: django

我在context_processor中定义了一个函数,用于传递我的设置中的值以在模板中使用。那么正确的方法是什么,更重要的是有什么区别?

def baseurl(request):
    return {'BASE_URL': settings.BASE_URL}

def baseurl(context):
    return {'BASE_URL': settings.BASE_URL}

我一直使用第一个,但已经遇到了第二个

的几个例子

2 个答案:

答案 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对象,因此会产生误导。