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下载歌词并嵌入歌曲文件中的实现代码
Nov 13 Python
解决Scrapy安装错误:Microsoft Visual C++ 14.0 is required...
Oct 01 Python
python的文件操作方法汇总
Nov 10 Python
Python视频爬虫实现下载头条视频功能示例
May 07 Python
Python实现的在特定目录下导入模块功能分析
Feb 11 Python
django rest framework vue 实现用户登录详解
Jul 29 Python
python3使用GUI统计代码量
Sep 18 Python
Python的对象传递与Copy函数使用详解
Dec 26 Python
Python实现疫情通定时自动填写功能(附代码)
May 27 Python
python字典key不能是可以是啥类型
Aug 04 Python
Python接口自动化系列之unittest结合ddt的使用教程详解
Feb 23 Python
Python快速实现一键抠图功能的全过程
Jun 29 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 和 MySQL 基础教程(四)
2006/10/09 PHP
CodeIgniter生成静态页的方法
2016/05/17 PHP
php利用fsockopen GET/POST提交表单及上传文件
2017/05/22 PHP
PHP反射原理与用法深入分析
2019/09/28 PHP
PHP之多条件混合筛选功能的实现方法
2019/10/09 PHP
自动完成JS类(纯JS, Ajax模式)
2009/03/12 Javascript
div模拟滚动条效果示例代码
2013/10/16 Javascript
jQuery实现Meizu魅族官方网站的导航菜单效果
2015/09/14 Javascript
每天一篇javascript学习小结(Function对象)
2015/11/16 Javascript
基于jQuery的ajax方法封装
2016/07/14 Javascript
jquery实现界面无刷新加载登陆注册
2016/07/30 Javascript
jQuery插件Easyui设置datagrid的pageNumber导致两次请求问题的解决方法
2016/08/06 Javascript
KnockoutJS 3.X API 第四章之click绑定
2016/10/10 Javascript
bootstrap输入框组件使用方法详解
2017/01/19 Javascript
vue元素实现动画过渡效果
2017/07/01 Javascript
CSS3结合jQuery实现动画效果及回调函数的实例
2017/12/27 jQuery
JS实现仿微信支付弹窗功能
2018/06/25 Javascript
vue组件之间通信实例总结(点赞功能)
2018/12/05 Javascript
JQuery+drag.js上传图片并且实现图片拖曳
2020/11/18 jQuery
[54:28]EG vs OG 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/18 DOTA
让python的Cookie.py模块支持冒号做key的方法
2010/12/28 Python
Python的Flask框架应用程序实现使用QQ账号登录的方法
2016/06/07 Python
python rsa 加密解密
2017/03/20 Python
Python数据结构与算法之二叉树结构定义与遍历方法详解
2017/12/12 Python
python3+requests接口自动化session操作方法
2018/10/13 Python
对DJango视图(views)和模版(templates)的使用详解
2019/07/17 Python
python Pillow图像处理方法汇总
2019/10/16 Python
Python3自带工具2to3.py 转换 Python2.x 代码到Python3的操作
2021/03/03 Python
让IE6支持css3,让 IE7、IE8 都支持CSS3
2011/10/09 HTML / CSS
整理HTML5中支持的URL编码与字符编码
2016/02/23 HTML / CSS
猫途鹰:全球领先的旅游点评社区
2017/04/07 全球购物
英国优质鞋类专家:Robinson’s Shoes
2017/12/08 全球购物
法学专业自我鉴定
2014/02/05 职场文书
乡镇领导班子批评与自我批评材料
2014/09/23 职场文书
大学生支教感言
2015/08/01 职场文书
react中props 的使用及进行限制的方法
2021/04/28 Javascript