Django 模板继承

在Django网页开发中,一个网站的不同页面都存在大量相同的布局,如果在每一个页面都写上相同的代码,那个维护的工作量就太大了。为了减少不必要的重复工作,Django允许开发者定义基本的模板,然后其他的页面继承这个模板的布局。

例如:首先我创建一个模板文件 layout.html

layout.html,注意在这个模板里面,我使用了一个新的模板语言{% block name%}, name可以自己取,这样凡是继承这个模板的页面,在新的页面里面,只需要把自己的内容放在同名的{%block name%}里面,这部分内容就自动替换到模板里面了,模板的其他部分会全部继承。

值得一提的是{% block css %}和{% block js %}这两个block的位置,这是为了新的页面可以放入自己的css定义和javascript文件,而不是全盘的继承。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>{% block title %} {% endblock %}</title>
    <link rel="stylesheet" href="/static/commons.css" />
    <style>
        body{
            margin: 0;
        }
        .menu{
            display: block;
            padding: 5px;
        }
    </style>
    {% block css %}{% endblock %}
</head>
<body>
    <div style="height: 48px;background-color: black;color: white">
        运维管理系统
    </div>
    <div>
        <div style="position: absolute;top:48px;bottom: 0;left: 0;width: 200px;background-color: brown;">
            <a class="menu" href="/cmdb/user_info/">用户管理</a>
            <a class="menu" href="/cmdb/user_group/">用户组管理</a>
        </div>
        <div style="position:absolute;top:48px;left: 210px;bottom: 0;right: 0;overflow: auto">
            {% block content %}
            {% endblock %}
        </div>
    </div>
<script></script>
{% block js %}{% endblock %}
</body>
</html>

下面是一个标准的Django生命周期

urls.py 里面定义url,指向一个函数

urlpatterns = [
    url(r‘^tpl1/‘, views.tpl1),
]

views.py调用的函数,返回一个列表给tp1.html

def tpl1(request):
    user_list = [1, 2, 3, 43]
    return render(request, ‘tpl1.html‘, {‘u‘: user_list})

tpl1.html 需要继承前面创建的模板, 通过{% extends ‘layout.html‘ %}指定继承哪一个模板,通过不同的block的名字可以定义自己的内容,这些内容会自动替换掉layout.html所对应的block,顺序并没关系。可以看见,我的tp1l.html写的很简单,全部都是对应模块和实际内容的替换,这里没有任何关于页面布局的设定,这些都可以从layout.html那里继承的。

注意这里还自定义了这个页面本身特有的css和Javascript,为了使用它们,前面layout里面专门定义了css和js的block。

{%  extends ‘layout.html‘ %}
{% block title %}用户管理{% endblock %}
{% block content %}
    <h1>用户管理</h1>
    <ul>
        {% for i in u %}
            <li>{{ i }}</li>
        {% endfor %}
    </ul>
{##}
{#    {% for i in u %}#}
{#        {% include ‘tag.html‘ %}#}
{#    {% endfor %}#}
{% endblock %}
{% block css %}
    <style>
        body{
            background-color: whitesmoke;
        }
    </style>
{% endblock %}
{% block js %}
    <script>
        console.log(‘hhh‘)
    </script>
{% endblock %}

效果:成功的继承了layout的内容,自己定义的内容,css和Javascript也应用了

时间: 2024-10-06 10:23:51

Django 模板继承的相关文章

[py]django模板继承

参考 django模板继承 通过搞一个base.html 这个base.html可以包含两类 block片断 其他html 然后index.html继承base.html 继承关系如图 代码体现template继承 关键字 - 预设片断模板- 留坑 {% block title %} 默认标题 {% endblock %} - 预包含html文件 {% include 'nav.html' %} - index.html继承base.html {% extends 'base.html' %}

Python学习---django模板继承180123

django模板继承  --20180123 a.include 模板标签 b.extend(继承)模板标签 ------include 模板标签 该标签允许在(模板中)包含其它的模板的内容. 标签的参数是所要包含的模板名称,可以是一个变量,也可以是用单/双引号硬编码的字符串. 每当在多个模板中出现相同的代码时,就应该考虑是否要使用 {% include %} 来减少重复. ------extend(继承)模板标签 先构造一个基础框架模板,而后在其子模板中对它所包含站点公用部分和定义块进行重载.

Django模板继承下的动态数据传递—上下文处理器

参考:http://www.caodahua.cn/detail/3/ 模板继承可以减少页面内容的重复定义,实现页面内容的重用.我的个人博客右侧的导航栏都是继承base页面从而让代码得到最大程度的复用.但是当父模板中有动态数据的话,这些动态数据在子模版中是不会显示的.我们可以通过自定义上下文处理器来解决. Django上下文处理器(Context Processor) 上下文处理器是接收HttpRequest为参数并返回dict形式的数据的函数.它的主要用途是将所有模板共享的公共数据添加到上下文

Django模板继承

base.html <head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>{% block title %}{% endblock %}</title></head> <body><h1>模板继承</h1>{% block content %}{% endbloc

Django模板继承和引用

一.模板继承 1.模板继承可以在创建一个基本“骨架”后,被其它子模板继承并覆盖,通过修改基础模板可以修改子模板中的所有框架 2.在模板teacher文件夹下创建基础模板 {% block xxx}与{% block }是成对出现的 该标签的功能是为子模板声明该出内容可以被覆盖重写 不写则为基础模板的内容 3.在student_list页面继承基础模板 首行的{% extends 'teacher/base.html'}必须写 其余内容按常规写在{% block }{% endblock }中 二

django-7.django模板继承(block和extends)

前言 打开一个网站时候,点导航栏切换到不同的页面,发现导航部分是不变的,只是页面的主体内容变了,于是就可以写个母模板,其它的子页面继承母模板就可以了. 母模板 可以在母模板中添加多个块标签,每个块标签取不同的名称,如下格式,context是块标签名称 {% block content %} {% endblock content %} <!DOCTYPE html> <html lang="en"> <head> <meta charset=&

python测试开发django-7.django模板继承(block和extends)

前言 打开一个网站时候,点导航栏切换到不同的页面,发现导航部分是不变的,只是页面的主体内容变了,于是就可以写个母模板,其它的子页面继承母模板就可以了. 母模板 可以在母模板中添加多个块标签,每个块标签取不同的名称,如下格式,content是块标签名称 {% block content %} {% endblock content %} <!DOCTYPE html> <html lang="en"> <head> <meta charset=&

Django模板继承后出现logo图片无法加载的问题

父文件:index.html <!DOCTYPE html> <html lang="en"> <head> <title>{% block title %}Index{% endblock %}</title> <meta charset="utf-8"> <script src="https://cdn.bootcss.com/jquery/1.10.2/jquery.min

django 模板的继承

django中模板继承操作: 模板继承 模板继承允许你建立一个基本的"骨架"模板, 它包含你所有最常用的站点元素 并 定义了一些可以被子模板覆盖的block. 这非常有用,例如各大门户网站左边一般有导航栏,在导航栏点击不同的区域时,只有中间<body>部分的内容更新了,而<body>标签之外的内容没有变.就像博客园一样 如何使用母模板和子模板? {% block title %}母模板的标题{% endblock %} {% block title %}子模板的