美文网首页
3.5 django 模板引入与继承

3.5 django 模板引入与继承

作者: yungege | 来源:发表于2019-08-16 13:29 被阅读0次

模板结构优化

引入模板

有时候一些代码是在许多模板中都用到的。如果我们每次都重复的去拷贝代码那肯定不符合项目的规范。一般我们可以把这些重复性的代码抽取出来,就类似于Python中的函数一样,以后想要使用这些代码的时候,就通过include包含进来。这个标签就是include。示例代码如下:

# header.html
<p>我是header</p>

# footer.html
<p>我是footer</p>

# main.html
{% include 'header.html' %}
<p>我是main内容</p>
{% include 'footer.html' %}

include标签寻找路径的方式。也是跟render渲染模板的函数是一样的。

默认include标签包含模板,会自动的使用主模板中的上下文,也即可以自动的使用主模板中的变量。如果想传入一些其他的参数,那么可以使用with语句。示例代码如下:

# header.html
<p>用户名:{{ username }}</p>

# main.html
{% include "header.html" with username='huangyong' %}

模板继承:

在前端页面开发中。有些代码是需要重复使用的。这种情况可以使用include标签来实现。也可以使用另外一个比较强大的方式来实现,那就是模板继承。模板继承类似于Python中的类,在父类中可以先定义好一些变量和方法,然后在子类中实现。模板继承也可以在父模板中先定义好一些子模板需要用到的代码,然后子模板直接继承就可以了。并且因为子模板肯定有自己的不同代码,因此可以在父模板中定义一个block接口,然后子模板再去实现。以下是父模板的代码:

{% load static %}
<!DOCTYPE html>
<html lang="en">
<head>
    <link rel="stylesheet" href="{% static 'style.css' %}" />
    <title>{% block title %}我的站点{% endblock %}</title>
</head>

<body>
    <div id="sidebar">
        {% block sidebar %}
        <ul>
            <li><a href="/">首页</a></li>
            <li><a href="/blog/">博客</a></li>
        </ul>
        {% endblock %}
    </div>
    <div id="content">
        {% block content %}{% endblock %}
    </div>
</body>
</html>

这个模板,我们取名叫做base.html,定义好一个简单的html骨架,然后定义好两个block接口,让子模板来根据具体需求来实现。子模板然后通过extends标签来实现,示例代码如下:

{% extends "base.html" %}

{% block title %}博客列表{% endblock %}

{% block content %}
    {% for entry in blog_entries %}
        <h2>{{ entry.title }}</h2>
        <p>{{ entry.body }}</p>
    {% endfor %}
{% endblock %}

需要注意的是:extends标签必须放在模板的第一行。
子模板中的代码必须放在block中,否则将不会被渲染。
如果在某个block中需要使用父模板的内容,那么可以使用{{block.super}}来继承。比如上例,{%block title%},如果想要使用父模板的title,那么可以在子模板的title block中使用{{ block.super }}来实现。

在定义block的时候,除了在block开始的地方定义这个block的名字,还可以在block结束的时候定义名字。比如{% block title %}{% endblock title %}。这在大型模板中显得尤其有用,能让你快速的看到block包含在哪里。

相关文章

  • 3.5 django 模板引入与继承

    模板结构优化 引入模板 有时候一些代码是在许多模板中都用到的。如果我们每次都重复的去拷贝代码那肯定不符合项目的规范...

  • Django 五

    目录 1.Django 模板的导入 2.Django 模板的继承 3.Django 搭建测试环境 4.Django...

  • 第五章 在线教育平台(列表详情页的开发

    列表详情页的开发 标签: django django template继承 模板继承 文件上传位置 base.ht...

  • 2018-05-29 Django 模板文件引入静态文件

    {% load static %} Django模板文件引入静态文件 ...

  • Django模板-模板继承

    模板继承 模板继承和类的继承含义是一样的,主要是为了提高代码重用,减轻开发人员的工作量。 典型应用:网站的头部、尾...

  • Django模板[模板继承]

    模板继承 模板继承和类的继承含义是一样的,主要是为了提高代码重用,减轻开发人员的工作量。 典型应用:网站的头部、尾...

  • Django模板继承

    继承: 效果: 也可以给css/js挖坑 效果:

  • Django模板标签

    这里只讨论Django的常用标签,以及模板的继承与引用。 Django的常用标签: 标签在渲染的过程中提供任意的逻...

  • django的模板 - 模板继承

    模板继承可以减少页面内容的重复定义,实现页面内容的重用 典型应用:网站的头部、尾部是一样的,这些内容可以定义在父模...

  • Flask基础03

    模板 1 模板的继承 什么是模板的继承​ 模板的继承类似于类的继承,如果一个模板中所出现的大量内容与另一个模板...

网友评论

      本文标题:3.5 django 模板引入与继承

      本文链接:https://www.haomeiwen.com/subject/tgbfsctx.html