Django模板无需传递user数据即可使用user对象的原因
Django模板中无需传递即可使用user对象的原理
这是因为Django自带了**上下文处理器(context processors)**机制,会自动给所有模板注入一些通用的上下文数据,不用你手动在视图里传参数。
具体来说,你的settings.py里的TEMPLATES配置项中,默认包含了django.contrib.auth.context_processors.auth这个处理器。它的作用就是把当前请求对应的用户对象(也就是代码里的request.user)自动添加到模板的上下文环境中,所以你在模板里直接写{% if user.is_authenticated %}这类代码就能调用user对象的属性和方法。
你手动通过render传递的posts是当前视图的特定数据,而user是所有模板都可能用到的通用数据,所以Django帮你做了自动注入的工作。另外要注意,不管用户有没有登录,模板里的user变量都存在——未登录时它是AnonymousUser实例,调用is_authenticated会返回False;登录后就是真实的用户模型对象,返回True。
内容的提问来源于stack exchange,提问作者Jason Park
相关产品推荐
相关产品推荐

