Django模板是否有类似Laravel Blade @auth的登录判断模板标签
Django本身可以实现完全等效的效果,有两种方案可选:
原生内置实现(推荐)
只要你项目中开启了django.contrib.auth相关组件和模板上下文处理器,所有模板默认都可以直接访问user对象,直接用if判断即可,和Laravel的@auth效果完全一致:
{% if user.is_authenticated %} <div>Show code only if logged in.</div> {% endif %}
如果要实现对应未登录用户可见的逻辑,对应Laravel的@guest,写法是:
{% if not user.is_authenticated %} <div>Show code only if not logged in.</div> {% endif %}
自定义auth标签实现你举例的语法
如果你更习惯{% auth %} {% endauth %}的写法,可以自己写一个自定义模板标签,步骤非常简单:
- 首先在你的Django应用目录下创建
templatetags文件夹,里面新增空的__init__.py文件,再新建auth_extra.py文件,写入以下代码:
from django import template from django.template.defaulttags import IfNode register = template.Library() @register.tag(name="auth") def auth_tag(parser, token): nodelist = parser.parse(("endauth",)) parser.delete_first_token() return IfNode( [(parser.compile_filter("user.is_authenticated"), nodelist)], [] )
- 之后在需要使用该标签的模板顶部引入标签库,就可以直接使用你想要的语法了:
{% load auth_extra %} {% auth %} <div>Show code only if logged in.</div> {% endauth %}
内容的提问来源于stack exchange,提问作者GTS Joe
相关产品推荐
相关产品推荐

