django模板结构优化的方法


Posted in Python onFebruary 28, 2019

模版结构优化

引入模版

有时候一些代码是在许多模版中都用到的。如果我们每次都重复的去拷贝代码那肯定不符合项目的规范。一般我们可以把这些重复性的代码抽取出来,就类似于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' %}" rel="external nofollow" />
  <title>{% block title %}我的站点{% endblock %}</title>
</head>

<body>
  <div id="sidebar">
    {% block sidebar %}
    <ul>
      <li><a href="/" rel="external nofollow" >首页</a></li>
      <li><a href="/blog/" rel="external nofollow" >博客</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 包含在哪里。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python中使用不同编码读写txt文件详解
May 28 Python
python虚拟环境virualenv的安装与使用
Dec 18 Python
python实现在pandas.DataFrame添加一行
Apr 04 Python
python使用turtle库与random库绘制雪花
Jun 22 Python
用Python编写一个高效的端口扫描器的方法
Dec 20 Python
Python判断一个list中是否包含另一个list全部元素的方法分析
Dec 24 Python
对python实现模板生成脚本的方法详解
Jan 30 Python
python队列Queue的详解
May 10 Python
bluepy 一款python封装的BLE利器简单介绍
Jun 25 Python
Django自定义用户登录认证示例代码
Jun 30 Python
numpy.linalg.eig() 计算矩阵特征向量方式
Nov 29 Python
Python列表的深复制和浅复制示例详解
Feb 12 Python
详解python做UI界面的方法
Feb 27 #Python
总结python中pass的作用
Feb 27 #Python
Python递归函数实例讲解
Feb 27 #Python
PyQt打开保存对话框的方法和使用详解
Feb 27 #Python
python中嵌套函数的实操步骤
Feb 27 #Python
python把1变成01的步骤总结
Feb 27 #Python
PyQt弹出式对话框的常用方法及标准按钮类型
Feb 27 #Python
You might like
网友原创的PHP模板类代码
2008/09/07 PHP
基于MySQL体系结构的分析
2013/05/02 PHP
在 Laravel 中动态隐藏 API 字段的方法
2019/10/25 PHP
JavaScript 学习 - 提高篇
2007/02/02 Javascript
javascript 构建一个xmlhttp对象池合理创建和使用xmlhttp对象
2010/01/15 Javascript
利用javascript解决图片缩放及其优化的代码
2012/05/23 Javascript
jQuery UI 实现email输入提示实例
2013/08/15 Javascript
jQuery获取(选中)单选,复选框,下拉框中的值
2014/02/21 Javascript
JS实现文字放大效果的方法
2015/03/03 Javascript
javascript连续赋值问题
2015/07/08 Javascript
AngularJS基础教程之简单介绍
2015/09/27 Javascript
JS实现三个层重叠点击互相切换的方法
2015/10/06 Javascript
JavaScript function函数种类详解
2016/02/22 Javascript
jQuery Html控件基本操作(日常收集整理)
2016/03/11 Javascript
简单总结JavaScript中的String字符串类型
2016/05/26 Javascript
javascript代码调试之console.log 用法图文详解
2016/09/30 Javascript
Angular.JS判断复选框checkbox是否选中并实时显示
2016/11/30 Javascript
JS实现颜色动态淡化效果
2017/03/06 Javascript
Vue.js开发环境快速搭建教程
2017/03/17 Javascript
javascript ES6 新增了let命令使用介绍
2017/07/07 Javascript
Vue自定义toast组件的实例代码
2018/08/15 Javascript
jQuery-Citys省市区三级菜单联动插件使用详解
2019/07/26 jQuery
详细分析JavaScript中的深浅拷贝
2020/09/17 Javascript
[44:40]Spirit vs Navi Supermajor小组赛 A组败者组第一轮 BO3 第一场 6.2
2018/06/03 DOTA
Python中SOAP项目的介绍及其在web开发中的应用
2015/04/14 Python
简介Django中内置的一些中间件
2015/07/24 Python
使用python3调用wxpy模块监控linux日志并定时发送消息给群组或好友
2019/06/05 Python
python 用所有标点符号分隔句子的示例
2019/07/15 Python
pygame实现俄罗斯方块游戏(AI篇2)
2019/10/29 Python
Jupyter notebook无法导入第三方模块的解决方式
2020/04/15 Python
使用keras框架cnn+ctc_loss识别不定长字符图片操作
2020/06/29 Python
技校毕业生的自我评价
2013/12/27 职场文书
美术国培研修感言
2014/02/12 职场文书
师德演讲稿范文
2014/05/06 职场文书
致地震灾区的慰问信
2015/03/23 职场文书
解决Golang中goroutine执行速度的问题
2021/05/02 Golang