最近才上手通过类的方式编写views.py,遇到一个小问题。
做django网站开发的时候,根据不同的用户级别,头部导航栏有不同的功能,需要通过登录的用户信息确定加载哪些导航栏内容,这里换一种方式,使用类来写views.py。目标很明确,获取当前用户的登录信息。开始上代码:
views.py:
class CommentNoticeListView(LoginRequiredMixin, ListView):
# 上下文的名称context
context_object_name = 'notices'
# 模板位置
template_name = 'notice/list.html'
# 登录重定向
login_url = '/account/login/'
# 未读通知的查询集
def get_queryset(self):
return self.request.user.notifications.unread()
def get_context_data(self, **kwargs):
context = super(CommentNoticeListView, self).get_context_data(**kwargs)
user = User.objects.get(username=self.request.user.username)
userinfo_all = UserInfo.objects.get(user=user)
context['userinfo_all'] = userinfo_all
return context
说明:
- 与通常写的视图函数一样,需要利用context上下文内容在前端进行显示,类中默认的是当前的,我们需要自己加载其他的上下文内容,比如上面说的当前用户信息。这里需要重写一个方法get_context_data。
context = super(CommentNoticeListView, self).get_context_data(**kwargs)
这一行必须要有,拿到原来的方法。- 下面这两行内容就是我获取当前用户信息的代码,和平常写的一样,利用request方法来实现。我这里有两个表,第一个是user表,django自带的,第二个是userInfo,自己增加的一些用户额外信息,我都目标是要使用userInfo里面的userClass字段,找到用户角色来进行导航栏的加载,这里得到的userinfo_all就是当前用户的所有信息。
user = User.objects.get(username=self.request.user.username)
userinfo_all = UserInfo.objects.get(user=user)
context['userinfo_all'] = userinfo_all
放入额外的上下文内容,再返回context,这时候就可以直接在前端利用{{ userinfo_all.属性名 }}的方式进行调用了,我这里是{{userinfo_all.userclass}}确定当前用户角色。
搞定。
参考链接:https://blog.csdn.net/mikezhou002/article/details/81293293