设置全局context变量 (显示用户登录名)
比如在每个页面的最上面部分需要显示用户的登录名称,如果不登录则显示为Guest。这部分内容在每个页面都会出现,所以可将该部分内容作为一个公共模板(如userauth.html),如然后在其他模板中进行引用。
userauth.html内容如下:
<table class="table table-bordered">
<thead>
<tr>
{% if user_loggedin %}
<th id="welcome">Welcome: {{user_loggedin}}</th>
<th id="errorb" style="display:none">eeeeth: {{errorb}}</th>
{% endif %}
<th> <a class="text-info" href="{% url 'aptest:logout' %}">LOGOUT</a> </th>
</tr>
</thead>
</table>
现在需要在访问每个view的时候,该用户名都可以自动得到,不需要再在每个view中单独定义username,然后再将该username渲染到模板中。
解决方法:
可以通过使用context_processors设置每个视图的共同变量,Context处理器允许设置一些变量,它们会在每个context中自动被设置好,可以被每个view自动调用,自动渲染到模板中,而不必每次调用 render_to_response() 时都指定。可以参考下C:\Django\django\template\context_processors.py文件中的公共变量。
1.新建C:\Django\workplace\sf\aptest\my_context_processors.py,内容如下:
该文件用于获取用户的username,将其存放于context中,从而可在模板中直接使用。
# -*- coding: UTF-8 -*-
#根据用户是否登录获得其username用于显示在Welcome Username。
def Get_user_loggedin(request):
userinfo = request.session.get('s_username',None)
if not userinfo:
user_loggedin='Guest'
else:
user_loggedin=request.session['s_username']
context={'user_loggedin':user_loggedin}
return context
2.编辑settings.py,添加如下内容:
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
'aptest.my_context_processors.Get_user_loggedin', #此为新加内容,aptest为该app的名字,Get_user_loggedin为my_context_processors.py中定义的函数名称
],
},
},
]
index view内容如下:
@login_req()
def index(request): #主页
import json
a=request.POST.get('a')
b=request.POST.get('b')
if a is not None and b is not None:
PLUS=int(a) + int(b)
MuLT=int(a) * int(b)
rets={'r1':PLUS,'r2':MuLT}
retsj=json.dumps(rets)
return HttpResponse(retsj)
#context={'user_loggedin':user_loggedin},context #此处无需再定义user_loggedin变量,index.html模板可以自动从my_context_processors.py中得到
return render(request,'aptest/index.html')
index.html模板引用了userauth.html模板内容,具体同http://www.cnblogs.com/dreamer-fish/p/5417190.html。在访问index view时,访问结果如下:

参考:https://segmentfault.com/a/1190000002461627
另一种方式,使用request.user直接显示用户登录名,view中不需要做任何设置(简单):
编辑userauth.html模板文件:
写法一:
<table class="table table-bordered">
<thead>
<tr>
{% if request.user.is_anonymous %} <!--判断当前是否为匿名用户,如果是的话,request.user返回AnonymousUser实例-->
<th id="welcome">Welcome: Guest</th>
{% else %}
<th id="welcome">Welcome: {{request.user}}</th>
<th id="errorb" style="display:none">eeeeth: {{errorb}}</th>
{% endif %}
<th> <a class="text-info" href="{% url 'aptest:logout' %}">LOGOUT</a> </th>
</tr>
</thead>
</table>
写法二:
<table class="table table-bordered">
<thead>
<tr>
{% if request.user.username %} <!--匿名用户返回None--> <!-- {% if request.user.is_authenticated %} 也可以使用-->
<th id="welcome">Welcome: {{request.user}}</th>
<th id="errorb" style="display:none">eeeeth: {{errorb}}</th>
{% else %}
<th id="welcome">Welcome: Guest</th>
{% endif %}
<th> <a class="text-info" href="{% url 'aptest:logout' %}">LOGOUT</a> </th>
</tr>
</thead>
</table>
django.contrib.auth.models.AnonymousUser 是一个类,它实现了 django.contrib.auth.models.User 接口,有如下的不同点:
- id 总是 None.
- is_anonymous() 返回 True 而不是 False.
- is_authenticated() 返回 False 而不是 True.
print request.user

设置全局context变量 (显示用户登录名)的更多相关文章
- logname - 显示用户登录名
总览 (SYNOPSIS) logname [OPTION]... 描述 (DESCRIPTION) 显示 当前用户 的 名字. --help 显示 帮助信息, 然后 结束. --version 显示 ...
- UBUNTU 下设置全局 path变量
全局的对所有用户都可以的使用的PATH: 可以通过修改配置文件: /etc/bashrc 和 /etc/profile 来时配置, 全局的PATH; 例如: vi /etc/profile 在最后后加 ...
- java web设置全局context参数
先在生成的web.xml文件中配置全局参数变量(Parameter:参数) <web-app> <context-param> 设置parameter(参数)的识别名字为adm ...
- centos7 设置grub密码及单用户登录实例
centos7与centos6在设置grub密码的操作步骤上有很大的差别,特此记录供以后查用 grub加密的目的: 防止不法分子利用单用户模式修改root密码 给grub加密可以采用明文或者加密的密文 ...
- day01-3-界面显示&用户登录&餐桌状态显示
满汉楼01-3 4.功能实现02 4.2菜单界面显示 4.2.1功能说明 显示主菜单.二级菜单和退出系统功能 4.2.2代码实现 先搭建界面显示的大体框架,具体的功能后面再实现 创建MHLView类: ...
- Android设置全局Context
新建一个java继承Application类 import android.app.Application; import android.content.Context; /** * 编写自定义Ap ...
- 设置Fedora能够使用root用户登录
1. 切换到root工作环境,因为一下操作必须拥有root权限 [ha@localhost ~]$ su root密码: 2. 编辑/etc/pam.d/gdm [root@localhost ha] ...
- ssh公钥认证原理及设置root外的其他用户登录ssh
1)创建其他用户 useradd [-d 登录目录] [-G ssh][用户名] 一定要将用户添加到ssh组不然无法没有权限登录ssh 2)设置ssh不允许root登录 vi /etc/ssh/ss ...
- MOss213获得用户登录名
因SharePoint2013默认使用claims based authentication,所以其帐号会是i:0#.w|/domain name这样的格式,如何去掉前面的内容,只保留登录帐号呢? 参 ...
随机推荐
- Java 国际化
国际化英文单词为:Internationalization,又称I18N,I为因为单词的第一个字母,18为这个单词的长度,而N代表这个单词的最后一个字母.国际化又称本地化(Localization,L ...
- JavaScript try...catch用法
一.用法 try...catch语句用了处理代码中可能出现的错误信息,将要进行测试的代码块放在try中,如果代码出现异常,则会被catch捕获 其格式如下: <script> try{ / ...
- [转]SQL SERVER中openrowset与opendatasource的区别
本文转自:http://blog.sina.com.cn/s/blog_6399df820102vyy8.html SQL SERVER中openrowset与opendatasource的区别: o ...
- Node.js学习笔记(八) --- Node.js的路由模块封装
1 .模块化的方式封装 整理中… 2 .封装仿照 express 的路由整理中…
- Java利用反射取得类的所有信息
Java中可以利用反射获取类的名称.构造函数.属性.方法.也就是说可以通过反射可以取得类的所有信息(不管该成员是否封装为private). 如有下面的Dept类定义: package org.lyk. ...
- 使用springcloud gateway搭建网关(分流,限流,熔断)
Spring Cloud Gateway Spring Cloud Gateway 是 Spring Cloud 的一个全新项目,该项目是基于 Spring 5.0,Spring Boot 2.0 和 ...
- git ssh key生成
重装系统后,需要重新安装git,ssh key便是遇到的其中一个问题,具体解决办法如下: 1.安装好git客户端后,查看本地是否有.ssh文件,命令如下:mkdir ~/.ssh 2.如果没有该文件, ...
- C#设计模式六大原则——接口隔离
接口隔离定义: 一般有两种定义: 1:客户端不应该依赖他不需要的接口 2:类间的依赖关系应该建立在最小的接口上 我们在建立接口时,应该尽量建立单一,不臃肿庞大的接口,应尽量使接口细化,方法尽量 ...
- loj#6235. 区间素数个数(min25筛)
题意 题目链接 Sol min25筛的板子题,直接筛出\(g(N, \infty)\)即可 筛的时候有很多trick,比如只存\(\frac{N}{x}\)的值,第二维可以滚动数组滚动掉 #inclu ...
- 转:ubuntu 18.04 LTS 安装 java10(JDK) 及问题说明
原文地址:ubuntu 18.04 LTS 安装 java10 及问题说明 1.下载相应的安装包,例如jdk-10.0.1_linux-x64_bin.tar.gz.下载地址: http://www. ...