我是Django的新工作,我需要做的事情看起来很简单,但还不能做到。这是问题,我有想法创建一个包含大量模板的大项目,并希望在所有模板中使用包含用户名的相同栏。因此,我创建了一个base.html
模板,其中包含一些内容,例如用户名和其他内容。我还有一个child.html
,其他内容像城市列表那样扩展了我的base.html
我的问题是,当我运行child.html
模板时,我的base.html
中的视图功能内容就像用户名不显示一样。
这就是我在做的事情:
我的用户名视图:
def userview(request):
a = User.objects.get(pk=1)
return render(request,'base.html',{'a': a})
我的base.html模板:
<!DOCTYPE html>
<html lang="en">
<head>
<link rel="stylesheet" href="style.css" />
<title>{% block title %}My amazing site{% endblock %}</title>
</head>
<body>
{{a.username}}
<div id="sidebar">
{% block sidebar %}
<ul>
<li><a href="">Home</a></li>
<li><a href="">Blog</a></li>
</ul>
{% endblock %}
</div>
<div id="content">
{% block content %}{% endblock %}
</div>
</body>
</html>
我对城市的看法列表:
def regionesli(request):
regioneslista = Regiones.objects.all()
return render(request,'child.html',{"resultados": regioneslista})
我的Child.html模板:
{% extends "base.html" %}
{% block title %}My amazing blog{% endblock %}
{% block content %}
{% for entry in resultados %}
<p>{{ entry.nombre_region }}</p>
{% endfor %}
{% endblock %}
答案 0 :(得分:0)
如果您只想打印当前用户,那么如果正确的模板上下文处理器处于活动状态,则user
模板变量应该可用。只需在模板中调用{{ user.username }}
即可。无需将User
对象传递到上下文中。相关文档here。
但是如果由于某种原因,你必须传递一个完全不同的对象,那么你的城市列表视图代码也必须传递相同的对象。这是因为在您的示例代码中,上下文变量不会被继承,因此您必须执行此类操作。
def userview(request):
a = SomeObject
return render(request,'base.html',{'a': a})
def regionesli(request):
a = SomeObject
regioneslista = Regiones.objects.all()
return render(request,'child.html',{'resultados': regioneslista, 'a': a})
如果你想要更干的方式来做,即不仅继承模板而且继承上下文变量,那么我建议你研究Class-based views。如果这样实现,它将看起来像这样:
class UserView(TemplateView):
template_name = 'path/to/base.html'
def get_context_data(self, **kwargs):
context = super(UserView, self).get_context_data(**kwargs)
context['a'] = SomeObject
return context
class CitiesListView(UserView):
template_name = 'path/to/child.html'
def get_context_data(self, **kwargs):
# context['a'] will be available once you call the next line
context = super(CitiesListView, self).get_context_data(**kwargs)
context['resultados'] = Regiones.objects.all()
# You can add more context variables here
return context
它可能看起来像更多的代码,但区别在于如果城市列表视图继承自用户视图,那么上下文变量也是继承的,如果有大量的上下文变量要继承,它会有很大的帮助。