解决Django模板无法使用perms变量问题的方法

发布时间 - 2026-01-11 03:11:10    点击率:

前言

本文主要给大家介绍了关于Django模板无法使用perms变量的解决方法,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。

解决方法:

首先,在使用Django内置权限管理系统时,settings.py文件要添加

INSTALLED_APPS添加:
'django.contrib.auth',

 
MIDDLEWARE添加:
'django.contrib.auth.middleware.AuthenticationMiddleware',

'django.contrib.auth.context_processors.auth',
TEMPLATES = [
 {
  'BACKEND': 'django.template.backends.django.DjangoTemplates',
  'DIRS': [os.path.join(BASE_DIR, 'templates')],
  'APP_DIRS': True,
  'OPTIONS': {
   'context_processors': [
    'django.template.context_processors.debug',
    'django.template.context_processors.i18n',
    'django.template.context_processors.media',
    'django.template.context_processors.static',
    'django.template.context_processors.tz',
    'django.contrib.messages.context_processors.messages',
    'django.template.context_processors.request',
    'django.contrib.auth.context_processors.auth',
   ],
  },
 },
]

如何在模板进行权限检查呢?

根据官网说明 https://docs.djangoproject.com/en/1.11/topics/auth/default/#permissions ,已登录用户权限保存在模板{{ perms }}变量中,是权限模板代理django.contrib.auth.context_processors.PermWrapper的一个实例,具体可以查看django/contrib/auth/context_processors.py源码

测试用例:

 

测试过程中,发现{{ perms }}变量压根不存在,没有任何输出;好吧,只能取Debug Django的源码了

def auth(request):
 """
 Returns context variables required by apps that use Django's authentication
 system.

 If there is no 'user' attribute in the request, uses AnonymousUser (from
 django.contrib.auth).
 """
 if hasattr(request, 'user'):
  user = request.user
 else:
  from django.contrib.auth.models import AnonymousUser
  user = AnonymousUser()
 print(user, PermWrapper(user), '-----------------------')
 return {
  'user': user,
  'perms': PermWrapper(user),
 }

测试访问接口,发现有的接口有打印权限信息,有的没有,似乎恍然醒悟

可以打印权限信息的接口返回:

 return render(request, 'fms/fms_add.html', {'request': request, 'form': form, 'error': error})

不能打印权限新的接口返回:

 return render_to_response( 'fms/fms.html', data)

render和render_to_response区别

render是比render_to_reponse更便捷渲染模板的方法,会自动使用RequestContext,而后者需要手动添加:

return render_to_response(request, 'fms/fms_add.html', {'request': request, 'form': form, 'error': error},context_instance=RequestContext(request))

其中RequestContext是django.template.Context的子类.接受requestcontext_processors ,从而将上下文填充渲染到模板问题已经很明确,由于使用了render_to_response方法,没有手动添加context_instance=RequestContext(request)导致模板不能使用{{ perms }}变量

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对的支持。


# django  # 模板变量  # 模板  # 变量赋值  # 模板设置变量  # Django模板变量如何传递给外部js调用的方法小结  # Django框架模板注入操作示例【变量传递到模板】  # Django框架模板语言实例小结【变量  # 标签  # 过滤器  # 继承  # html转义】  # python Django模板的使用方法(图文)  # 在Django框架中自定义模板过滤器的方法  # Python的Django框架中模板碎片缓存简介  # python Django模板的使用方法  # 详解在Python的Django框架中创建模板库的方法  # django框架模板中定义变量(set variable in django template)的方  # 解决方法  # 子类  # 管理系统  # 说了  # 没有任何  # 不多  # 有一定  # 给大家  # 不存在  # 好吧  # 这篇文章  # 谢谢大家  # 官网  # 而将  # 可以查看  # 过程中  # 使用了  # 如何在  # 有疑问  # DIRS 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: JS弹性运动实现方法分析  详解Android图表 MPAndroidChart折线图  实现点击下箭头变上箭头来回切换的两种方法【推荐】  Laravel如何实现模型的全局作用域?(Global Scope示例)  EditPlus中的正则表达式实战(5)  LinuxShell函数封装方法_脚本复用设计思路【教程】  Laravel怎么连接多个数据库_Laravel多数据库连接配置  Laravel如何发送邮件_Laravel Mailables构建与发送邮件的简明教程  Python文件异常处理策略_健壮性说明【指导】  深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?  Laravel怎么实现软删除SoftDeletes_Laravel模型回收站功能与数据恢复【步骤】  Laravel如何实现数据库事务?(DB Facade示例)  Laravel怎么处理异常_Laravel自定义异常处理与错误页面教程  JavaScript如何实现错误处理_try...catch如何捕获异常?  香港服务器选型指南:免备案配置与高效建站方案解析  如何在Windows服务器上快速搭建网站?  合肥制作网站的公司有哪些,合肥聚美网络科技有限公司介绍?  Laravel如何使用Blade组件和插槽?(Component代码示例)  Laravel如何实现数据导出到CSV文件_Laravel原生流式输出大数据量CSV【方案】  如何快速查询域名建站关键信息?  Laravel如何使用Service Container和依赖注入?(代码示例)  Laravel怎么自定义错误页面_Laravel修改404和500页面模板  网易LOFTER官网链接 老福特网页版登录地址  Laravel如何处理文件上传_Laravel Storage门面实现文件存储与管理  怎么用AI帮你设计一套个性化的手机App图标?  如何确认建站备案号应放置的具体位置?  创业网站制作流程,创业网站可靠吗?  Win11搜索栏无法输入_解决Win11开始菜单搜索没反应问题【技巧】  Laravel如何实现用户注册和登录?(Auth脚手架指南)  uc浏览器二维码扫描入口_uc浏览器扫码功能使用地址  如何自定义safari浏览器工具栏?个性化设置safari浏览器界面教程【技巧】  高防网站服务器:DDoS防御与BGP线路的AI智能防护方案  Laravel如何处理异常和错误?(Handler示例)  如何在Ubuntu系统下快速搭建WordPress个人网站?  Laravel事件和监听器如何实现_Laravel Events & Listeners解耦应用的实战教程  如何在宝塔面板中修改默认建站目录?  Laravel如何实现事件和监听器?(Event & Listener实战)  如何用低价快速搭建高质量网站?  node.js报错:Cannot find module 'ejs'的解决办法  laravel怎么配置和使用PHP-FPM来优化性能_laravel PHP-FPM配置与性能优化方法  JavaScript数据类型有哪些_如何准确判断一个变量的类型  千问怎样用提示词获取健康建议_千问健康类提示词注意事项【指南】  php json中文编码为null的解决办法  Laravel项目怎么部署到Linux_Laravel Nginx配置详解  如何在IIS7上新建站点并设置安全权限?  为什么php本地部署后css不生效_静态资源加载失败修复技巧【技巧】  Laravel如何实现多级无限分类_Laravel递归模型关联与树状数据输出【方法】  如何在万网开始建站?分步指南解析  成都网站制作公司哪家好,四川省职工服务网是做什么用?  Laravel如何配置和使用缓存?(Redis代码示例)