你可以在没有上下文的情况下返回render()吗?

时间:2014-01-26 22:17:58

标签: python django django-views

我有一个我正在渲染的Django模板,但是,我没有必要给它一个上下文(我不在模板中使用任何变量)。

如果我的渲染/返回功能如下:

    return render(request, 'shipment/createAccount.html')

此代码功能正常,但我想确保没有更好的方法来处理这种情况。

2 个答案:

答案 0 :(得分:2)

这很好,但render_to_response是更短,更“香草”的版本。没有多大魔力 - 请参阅https://github.com/django/django/blob/master/django/shortcuts.py

中django中的实际代码

主要的替代方案是,如果不需要视图逻辑/身份验证,您可以将其视为静态文件。

答案 1 :(得分:2)

这是完全可以的。如果我们检查render的声明,我们会看到它返回

return HttpResponse(loader.render_to_string(*args, **kwargs),
                        **httpresponse_kwargs)

之后,我们检查render_to_string的定义:

def render_to_string(template_name, dictionary=None, context_instance=None):
    -snip-
    if not context_instance:
        return t.render(Context(dictionary))

所以,显然,不提供上下文字典是可以的。当然,我们会在Context

时检查dictionary=None处理情况的方式
super(Context, self).__init__(dict_)

......这已经越来越深了!我们检查ContextBaseContext的基类,发现它能很好地处理这种情况:

def __init__(self, dict_=None):
        self._reset_dicts(dict_)

    def _reset_dicts(self, value=None):
        builtins = {'True': True, 'False': False, 'None': None}
        self.dicts = [builtins]
        if value is not None:
            self.dicts.append(value)
相关问题