因此,我仅了解基于类的视图,以及它们如何将上下文传递给相应的模板进行渲染。但是我在下面附加的一些代码中发现了一些奇怪的东西:
django模板可以识别user
中的if user.is_authenticated
,但是我检查了Sdetailview
的上下文,user
不在其中。当我以管理员身份登录时,模板将呈现1
,否则呈现2
。有人知道user
是从哪里传递到模板的吗?除了上下文还从基于类的视图传递给模板什么?
谢谢。
这是视图:
from django.views.generic import DetailView
from . import models
class Sdetailview(DetailView):
context_object_name = "details"
model = models.School
template_name = "basicapp/sdetail.html"
这是模型模板
{% extends "basicapp/bbase.html" %}
{% block body_block %}
{% if user.is_authenticated %}
<h1>1</h1>
{% else %}
<h1>2</h1>
{% endif %}
<div class="container">
<h1>School Details</h1>
<p>{{details.name}}</p>
<p>{{details.principal}}</p>
<p>{{details.location}}</p>
<p><a class='btn btn-warning' href="{% url 'bapp:update' pk=details.pk %}">Update</a></p>
</div>
</div>
{% endblock %}
答案 0 :(得分:1)
DetailView如here所述,继承自多个mixin和属性。
正在传递上下文和请求。你也可以做
request.user.is_authenticated
上下文处理器也被传递。 默认情况下:
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
'django.contrib.auth.context_processors.auth',负责 user.is_authenticated
有关上下文处理器here的更多信息。