django模板結(jié)構(gòu)優(yōu)化的方法
模版結(jié)構(gòu)優(yōu)化
引入模版
有時(shí)候一些代碼是在許多模版中都用到的。如果我們每次都重復(fù)的去拷貝代碼那肯定不符合項(xiàng)目的規(guī)范。一般我們可以把這些重復(fù)性的代碼抽取出來,就類似于Python中的函數(shù)一樣,以后想要使用這些代碼的時(shí)候,就通過 include 包含進(jìn)來。這個(gè)標(biāo)簽就是 include 。示例代碼如下:
# header.html
<p>我是header</p>
# footer.html
<p>我是footer</p>
# main.html
{% include 'header.html' %}
<p>我是main內(nèi)容</p>
{% include 'footer.html' %}
include 標(biāo)簽尋找路徑的方式。也是跟 render 渲染模板的函數(shù)是一樣的。
默認(rèn) include 標(biāo)簽包含模版,會(huì)自動(dòng)的使用主模版中的上下文,也即可以自動(dòng)的使用主模版中的變量。如果想傳入一些其他的參數(shù),那么可以使用 with 語句。示例代碼如下:
# header.html
<p>用戶名:{{ username }}</p>
# main.html
{% include "header.html" with username='huangyong' %}
模板繼承:
在前端頁面開發(fā)中。有些代碼是需要重復(fù)使用的。這種情況可以使用 include 標(biāo)簽來實(shí)現(xiàn)。也可以使用另外一個(gè)比較強(qiáng)大的方式來實(shí)現(xiàn),那就是模版繼承。模版繼承類似于 Python 中的類,在父類中可以先定義好一些變量和方法,然后在子類中實(shí)現(xiàn)。模版繼承也可以在父模版中先定義好一些子模版需要用到的代碼,然后子模版直接繼承就可以了。并且因?yàn)樽幽0婵隙ㄓ凶约旱牟煌a,因此可以在父模版中定義一個(gè)block接口,然后子模版再去實(shí)現(xiàn)。以下是父模版的代碼:
{% load static %}
<!DOCTYPE html>
<html lang="en">
<head>
<link rel="stylesheet" href="{% static 'style.css' %}" rel="external nofollow" />
<title>{% block title %}我的站點(diǎn){% 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>
這個(gè)模版,我們?nèi)∶凶?base.html ,定義好一個(gè)簡單的 html 骨架,然后定義好兩個(gè) block 接口,讓子模版來根據(jù)具體需求來實(shí)現(xiàn)。子模板然后通過 extends 標(biāo)簽來實(shí)現(xiàn),示例代碼如下:
{% extends "base.html" %}
{% block title %}博客列表{% endblock %}
{% block content %}
{% for entry in blog_entries %}
<h2>{{ entry.title }}</h2>
<p>{{ entry.body }}</p>
{% endfor %}
{% endblock %}
需要注意的是:extends標(biāo)簽必須放在模版的第一行。
子模板中的代碼必須放在block中,否則將不會(huì)被渲染。
如果在某個(gè) block 中需要使用父模版的內(nèi)容,那么可以使用 {{block.super}} 來繼承。比如上例, {%block title%} ,如果想要使用父模版的 title ,那么可以在子模版的 title block 中使用 {{ block.super }} 來實(shí)現(xiàn)。
在定義 block 的時(shí)候,除了在 block 開始的地方定義這個(gè) block 的名字,還可以在 block 結(jié)束的時(shí)候定義名字。比如 {% block title %}{% endblock title %} 。這在大型模版中顯得尤其有用,能讓你快速的看到 block 包含在哪里。
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- django框架模型層功能、組成與用法分析
- 利用Django模版生成樹狀結(jié)構(gòu)實(shí)例代碼
- Django工程的分層結(jié)構(gòu)詳解
- Django-Model數(shù)據(jù)庫操作(增刪改查、連表結(jié)構(gòu))詳解
- Django框架視圖層URL映射與反向解析實(shí)例分析
- Django框架視圖函數(shù)設(shè)計(jì)示例
- 使用PyCharm配合部署Python的Django框架的配置紀(jì)實(shí)
- Python的Django框架中設(shè)置日期和字段可選的方法
- 分析Python的Django框架的運(yùn)行方式及處理流程
- Linux下將Python的Django項(xiàng)目部署到Apache服務(wù)器
- Python的Django框架中settings文件的部署建議
- Django框架組成結(jié)構(gòu)、基本概念與文件功能分析
相關(guān)文章
Python的自動(dòng)化部署模塊Fabric的安裝及使用指南
這篇文章主要介紹了Python的自動(dòng)化部署模塊Fabric的安裝及使用指南,文中以Debian系統(tǒng)為環(huán)境進(jìn)行了實(shí)例演示,需要的朋友可以參考下2016-01-01
在Python的web框架中編寫創(chuàng)建日志的程序的教程
這篇文章主要介紹了在Python的web框架中編寫創(chuàng)建日志的程序的教程,示例代碼基于Python2.x版本,需要的朋友可以參考下2015-04-04
Python實(shí)現(xiàn)將MongoDB中的數(shù)據(jù)導(dǎo)入到MySQL
這篇文章主要為大家詳細(xì)介紹了如何通過Python封裝一個(gè)將?MongoDB?中的數(shù)據(jù)導(dǎo)入到?MySQL?中的?Python?工具類?MongoToMysql,感興趣的可以了解一下2023-05-05
Python學(xué)習(xí)筆記之While循環(huán)用法分析
這篇文章主要介紹了Python學(xué)習(xí)筆記之While循環(huán)用法,結(jié)合具體實(shí)例形式分析了while循環(huán)的原理、用法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下2019-08-08
pytorch使用resnet快速加載官方提供的預(yù)訓(xùn)練模型
這篇文章主要介紹了pytorch使用resnet快速加載官方提供的預(yù)訓(xùn)練模型方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-09-09
使用paramiko遠(yuǎn)程執(zhí)行命令、下發(fā)文件的實(shí)例
下面小編就為大家?guī)硪黄褂胮aramiko遠(yuǎn)程執(zhí)行命令、下發(fā)文件的實(shí)例。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-10-10
python爬取w3shcool的JQuery課程并且保存到本地
本文主要介紹python爬取w3shcool的JQuery的課程并且保存到本地的方法解析。具有很好的參考價(jià)值。下面跟著小編一起來看下吧2017-04-04

