Django模板扩展:子项不能覆盖父项

时间:2019-02-02 14:23:27

标签: django templates

我运行python manage.py runserver,它仅显示父级- base.html 。根据{{​​3}},它应使用子模板覆盖父模板:

  

模板继承允许您构建一个基本的“骨架”模板,该模板包含站点的所有常见元素,并定义子模板可以覆盖的块。

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 %}

我相信documentation的答案和评论在描述中不清楚,这就是我提出这一问题的原因。

2 个答案:

答案 0 :(得分:1)

因为您正在将基本模板渲染到视图函数中。

def baseview(request):
   return render(request,'base.html')

渲染base_child模板时,它将覆盖父模板。

def baseview(request):
    return render(request,'child_base.html')

答案 1 :(得分:0)

这两个模板都应使用不同的视图和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 for child:

def childview(request):
   return render(request,'base_child.html') 

现在键入

localhost:8000/base/

在您的浏览器网址中,它将显示基本title

,如果您输入

localhost:8000/child/

在您的浏览器网址中,它将用子title覆盖基本title