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中的闭包总结
Sep 18 Python
利用Python脚本在Nginx和uwsgi上部署MoinMoin的教程
May 05 Python
python 读取txt,json和hdf5文件的实例
Jun 05 Python
Python将list中的string批量转化成int/float的方法
Jun 26 Python
Python从使用线程到使用async/await的深入讲解
Sep 16 Python
Python二叉树的遍历操作示例【前序遍历,中序遍历,后序遍历,层序遍历】
Dec 24 Python
python解释器spython使用及原理解析
Aug 24 Python
Pytorch.nn.conv2d 过程验证方式(单,多通道卷积过程)
Jan 03 Python
JupyterNotebook 输出窗口的显示效果调整方法
Apr 13 Python
Flask缓存静态文件的具体方法
Aug 02 Python
pycharm 的Structure界面设置操作
Feb 05 Python
python数据库批量插入数据的实现(executemany的使用)
Apr 30 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使用unset()删除数组中某个单元(键)的方法
2015/02/17 PHP
Javascript的IE和Firefox兼容性汇编
2006/07/01 Javascript
js 操作符汇总
2014/11/08 Javascript
Backbone.js 0.9.2 源码注释中文翻译版
2015/06/25 Javascript
jquery获取img的src值的简单实例
2016/05/17 Javascript
KnockoutJS 3.X API 第四章之click绑定
2016/10/10 Javascript
JavaScript 身份证号有效验证详解及实例代码
2016/10/20 Javascript
jQuery实现扑克正反面翻牌效果
2017/03/10 Javascript
vue.js学习之vue-cli定制脚手架详解
2017/07/02 Javascript
浅谈angular4 ng-content 中隐藏的内容
2017/08/18 Javascript
引入JavaScript时alert弹出框显示中文乱码问题
2017/09/16 Javascript
ES6中的Promise代码详解
2017/10/09 Javascript
layui禁用侧边导航栏点击事件的解决方法
2019/09/25 Javascript
跟老齐学Python之编写类之二方法
2014/10/11 Python
python修改注册表终止360进程实例
2014/10/13 Python
给Python入门者的一些编程建议
2015/06/15 Python
Python验证码识别处理实例
2015/12/28 Python
Python探索之实现一个简单的HTTP服务器
2017/10/28 Python
python将每个单词按空格分开并保存到文件中
2018/03/19 Python
PyQt5每天必学之切换按钮
2020/08/20 Python
django框架基于queryset和双下划线的跨表查询操作详解
2019/12/11 Python
使用matplotlib绘制图例标签中带有公式的图
2019/12/13 Python
Matplotlib绘制雷达图和三维图的示例代码
2020/01/07 Python
使用PyQt的QLabel组件实现选定目标框功能的方法示例
2020/05/19 Python
利用Python实现Excel的文件间的数据匹配功能
2020/06/16 Python
.img/.hdr格式转.nii格式的操作
2020/07/01 Python
利用css3制作3D样式按钮实现代码
2013/03/18 HTML / CSS
Hashtable 添加内容的方式有哪几种,有什么区别?
2012/04/08 面试题
授权委托书范文
2014/07/31 职场文书
工作证明英文模板
2014/10/21 职场文书
合伙经营协议书范本(通用版)
2014/12/03 职场文书
2016年12月份红领巾广播稿
2015/12/21 职场文书
企业团队精神心得体会
2016/01/19 职场文书
你会写请假条吗?
2019/06/26 职场文书
如何利用map实现Nginx允许多个域名跨域
2021/03/31 Servers
SONY AN-LP1 短波有源天线放大器图
2022/04/05 无线电