如何在Django的base.html中使用动态变量

3 投票
3 回答
1554 浏览
提问于 2025-04-17 09:47

我想在每个页面的顶部输出 '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里了。

撰写回答