在模板中使用Django视图变量
这是一个相当基础的问题(我刚开始学习Django),但是我在模板中使用在视图里设置的变量时遇到了麻烦。如果我在视图里初始化一个字符串或列表(比如说 h = "hello"),然后在模板中尝试调用它:
{{ h }}
结果既没有输出,也没有错误。同样,如果我在模板中使用一个不存在的变量:
{{ asdfdsadf }}
也没有报错。这正常吗?我该如何在模板中使用我的变量呢?谢谢!
3 个回答
没错!这是正常现象。在Django中,模板里的这种错误不会显示出来,这是预期中的行为。
要正确渲染模板,可以使用 render_to_response('your_template.html', {'h':h})
这个方法(如果你的上下文字典很大,还有一个不太好的快捷方式 render_to_response('your_template.html', locals())
)。
这里有一些解释和例子: http://www.djangobook.com/en/beta/chapter04/ (查看“如何处理无效变量”这一部分)。
你也可以使用
return render(request, 'your_template.html', {'h':h, 'var1':var1})
可以查看最新的手册,地址是 https://docs.djangoproject.com/es/1.9/topics/http/shortcuts/
要在模板中使用一个变量,这个变量必须在渲染这个模板时的上下文中。我的猜测是,你在渲染模板的时候没有传递一个上下文字典。
http://docs.djangoproject.com/en/dev/topics/http/shortcuts/#render-to-response
这里提到的“字典”就是一个包含你想在上下文中使用的所有变量的字典。例如:
return render_to_response('your_template.html', {'h': h})
至于那个“没有错误”的错误……这是对于无效模板变量的默认设置。如果你想的话,可以在项目的设置中更改这个选项。
http://docs.djangoproject.com/en/dev/ref/settings/#template-string-if-invalid