Django 模板扩展:子级不覆盖父级
Posted
技术标签:
【中文标题】Django 模板扩展:子级不覆盖父级【英文标题】:Django Template Extends: Children not overriding parent 【发布时间】:2019-06-26 21:11:32 【问题描述】:我运行 python manage.py runserver
,它只显示父级 - base.html。根据documentation,它应该用子模板覆盖父模板:
模板继承允许您构建一个基本“骨架”模板,其中包含您网站的所有常见元素并定义子模板可以覆盖的块。
base.html 和 base_child.html 位于同一文件夹中:MyProject/MyApp/Templates/
views.py
def baseview(request):
return render(request,'base.html')
这是我的模板:
base.html
<!DOCTYPE html>
<html lang="en">
<head>
<title>
% block titleblock %
Hello World Title
% endblock %
</title>
</head>
<body>
<p>
% block bodyblock %
Hello World!
% endblock %
</p>
</body>
</html>
base_child.html
% extends "base.html" %
% block titleblock %
Hello Grass title
% endblock %
% block bodyblock %
Hello Grass!
% endblock %
我相信this question的答案和cmets在描述中不清楚,这就是我提出这个的原因。
【问题讨论】:
【参考方案1】:因为您将基本模板渲染到您的视图函数中。
def baseview(request):
return render(request,'base.html')
当您渲染 base_child 模板时,它会覆盖父模板。
def baseview(request):
return render(request,'child_base.html')
【讨论】:
太棒了,谢谢。简而言之,我想它只能在我选择它时覆盖。我在进行故障排除时遇到的问题是,当我应该删除 base_child 中的一个字段然后尝试您的答案时。再次感谢你:)【参考方案2】:这两个模板都应该使用不同的视图和 url 呈现,如下所示:
urls.py 用于基础:
url(r'base/$', views.baseview),
用于基础的views.py:
def baseview(request):
return render(request,'base.html')
孩子的urls.py:
url(r'child/$', views.childview),
views.py 为孩子:
def childview(request):
return render(request,'base_child.html')
现在当你输入
localhost:8000/base/
在您的浏览器网址中,它将显示 base title
如果你输入
localhost:8000/child/
在您的浏览器 url 中,它将用子 title
覆盖基本 title
【讨论】:
根据问题你的回答是正确的。您提供了如何根据情况在不同视图中使用这两个模板的详细信息。我对任何人都投了反对票。@Ahtisham以上是关于Django 模板扩展:子级不覆盖父级的主要内容,如果未能解决你的问题,请参考以下文章
如果父级不调用 wait(),则同一父级的两个子级不使用管道进行通信