如何在Django的base.html中使用动态变量
我想在每个页面的顶部输出 'hello,XXX'(其中XXX是从请求会话中获取的用户信息),所以我在base.html文件中写了下面的代码:
hello {{ request.session['user'] }}
但是出现了一个模板语法错误:
Could not parse the remainder: '['user']' from 'request.session['user']'
有一个类似的问题,但我真的不太明白。
Django base.html中的动态变量如果XXX是一个函数的返回值,那这个函数应该在哪里写,怎么把这个值显示出来呢?
谢谢 :)
3 个回答
1
我记得在Django的模板里已经有一个叫{{ user }}
的东西了,如果你使用的是Django的用户认证系统的话。所以你可以试着用{{ user.username }}
来获取用户名。
你也可以看看这个讨论。希望对你有帮助。
2
在Django中,你在模板代码里不使用列表索引(比如说 request.session['user']),而是用一种“类似”的函数写法,比如:request.session.user
来获取。这就是模板系统的工作方式。
在你的使用场景中,值得注意的是,Django为request.session.user
提供了一个别名,叫做user
。所以如果你想获取用户名,可以这样写:user.username
,或者如果想要他们的名字,可以用user.first_name
。当然,你也可以用request.session.user.username
来达到同样的效果。
2
这和在base.html里没有关系。也和函数没关系,因为你并没有调用任何函数。问题其实很简单,就是你没有仔细阅读模板语法的说明。在模板中,访问属性和查找字典都是用“.”来做的。
{{ request.session.user }}
不过我不太明白你为什么要用会话(session)来做这个,因为用户的信息已经在request.user里了。