Django中级篇之模板语言
模板
一、引用變量
模版的創(chuàng)建過程,對(duì)于模版,其實(shí)就是讀取模版(其中嵌套著模版標(biāo)簽),然后將 Model 中獲取的數(shù)據(jù)插入到模版中,最后將信息返回給用戶。
{{ xxx }}二、標(biāo)簽
用{%? %}表示,用于處理一些邏輯
常用的幾個(gè)標(biāo)簽{% if 條件 %}內(nèi)容 {% endif %}{% for xxx in 條件 %}{{xxx}} {% endfor %}1、for標(biāo)簽
1>每一次循環(huán)中,模板系統(tǒng)會(huì)渲染在 {% for %} 和 {% endfor %} 之間的所有內(nèi)容
2> 給標(biāo)簽增加一個(gè) reversed 使得該列表被反向迭代
{% for athlete in athlete_list reversed %}3>可以嵌套使用 {% for %} 標(biāo)簽
4> Django不支持退出循環(huán)操作。 如果我們想退出循環(huán),可以改變正在迭代的變量,讓其僅僅包含需要迭代的項(xiàng)目。 同理,Django也不支持continue語(yǔ)句,我們無(wú)法讓當(dāng)前迭代操作跳回到循環(huán)頭部。
5>在每個(gè)`` {% for %}``循環(huán)里有一個(gè)稱為`` forloop`` 的模板變量。這個(gè)變量有一些提示循環(huán)進(jìn)度信息的屬性。
富有魔力的forloop變量只能在循環(huán)中得到,當(dāng)模板解析器到達(dá){% endfor %}時(shí)forloop就消失了
forloop.counter 總是一個(gè)表示當(dāng)前循環(huán)的執(zhí)行次數(shù)的整數(shù)計(jì)數(shù)器forloop.counter0 類似于forloop.counter ,但是它是從0計(jì)數(shù)的forloop.first是一個(gè)布爾值;在第一次執(zhí)行循環(huán)時(shí)被置為Trueforloop.last 是一個(gè)布爾值;在最后一次執(zhí)行循環(huán)時(shí)被置為True2、if標(biāo)簽
1>{% if %}標(biāo)簽計(jì)算一個(gè)變量值,如果是“true”,即它存在、不為空并且不是false的boolean值?系統(tǒng)則會(huì)顯示{% if %}和{% endif %}間的所有內(nèi)容
2>沒有{% elif %}標(biāo)簽,使用嵌套的{% if %}標(biāo)簽可以做到同樣的事情
3>{% if %}標(biāo)簽接受and,or或者not來(lái)測(cè)試多個(gè)變量值或者否定一個(gè)給定的變量
4>{% if %}標(biāo)簽不允許同一標(biāo)簽里同時(shí)出現(xiàn)and和or,否則邏輯容易產(chǎn)生歧義
5>如果你想結(jié)合and和or來(lái)做高級(jí)邏輯,只需使用嵌套的{% if %}標(biāo)簽即可
6>多次使用同一個(gè)邏輯符號(hào)是合法的
三、模板繼承
模板可以用繼承的方式來(lái)實(shí)現(xiàn)復(fù)用。在整個(gè)網(wǎng)站中,減少共用頁(yè)面區(qū)域(比如站點(diǎn)導(dǎo)航)所引起的重復(fù)和冗余代碼
本質(zhì)上來(lái)說(shuō),模板繼承就是先構(gòu)造一個(gè)基礎(chǔ)框架模板,而后在其子模板中對(duì)它所包含站點(diǎn)公用部分和定義塊進(jìn)行重載,第一步是定義 基礎(chǔ)模板 , 該框架之后將由子模板所繼承
母版:
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>{% block title %}久久尋網(wǎng){% endblock %}</title> <link type="text/css" rel="stylesheet" href="style.css" /> </head> <body><div id="side">{% block side %}<ul><li><a href="/index.html">主頁(yè)</a></li><li><a href="/blog/index.html">博客</a></li></ul>{% endblock %}</div><div id="content">{% block content %}{% endblock %}</div> </body> </html>我們稱它為?base.html, 定義了一些簡(jiǎn)單的 HTML 骨架文檔, 你可以把它用到一些簡(jiǎn)單兩列的網(wǎng)頁(yè)上. “子” 模板的任務(wù)就是用內(nèi)容填寫這些空白的內(nèi)容塊
子版:
{% extends "text.html" %} {% block title %}修改標(biāo)題{% endblock %}{% block side %}<ul><li><a href="/index.html">修改后主頁(yè)</a></li><li><a href="/blog/index.html">修改后博客</a></li></ul> {% endblock %}{% block content %}<h1>新增加內(nèi)容</h1>{% endblock %}1>{% extends "text.html" %}表示導(dǎo)入母版
2>?每個(gè){% block %}標(biāo)簽所要做的是告訴模板引擎,該模板下的這一塊內(nèi)容將有可能被子模板覆蓋,而不一定一定要覆蓋掉母版中的內(nèi)容
四、注釋標(biāo)簽
1. Django單行注釋使用?{# 這是一個(gè)注釋 #}
用這種語(yǔ)法的注釋不能跨越多行, 這個(gè)限制是為了提高模板解析的性能。 在下面這個(gè)模板中,輸出結(jié)果和模板本身是 完全一樣的(也就是說(shuō),注釋標(biāo)簽并沒有被解析為注釋):
This is a {# this is not a comment #} test.2. 實(shí)現(xiàn)多行注釋,可以使用`` {% comment %}`` 模板標(biāo)簽
{% comment %} This is a multi-line comment. {% endcomment %}五、過濾器
1>模板過濾器可以在變量被顯示前修改它,過濾器使用管道字符,如下所示:
{{ name|lower }}2>過濾管道可以被*?套接* ,既是說(shuō),一個(gè)過濾器管道的輸出又可以作為下一個(gè)管道的輸入:
{{ my_list|first|upper }}六、ifequal/ifnotequal 標(biāo)簽
1. {% ifequal %} 標(biāo)簽比較兩個(gè)值,當(dāng)他們相等時(shí),顯示在 {% ifequal %} 和 {% endifequal %} 之中所有的值下面的例子比較兩個(gè)模板變量 user 和 currentuser :
{% ifequal user currentuser %}<h1>Welcome!</h1> {% endifequal %}自定義simple_tag
a、在app中創(chuàng)建templatetags模塊
b、創(chuàng)建任意 .py 文件,如:xx.py
#!/usr/bin/env python#coding:utf-8from django import templatefrom django.utils.safestring import mark_safefrom django.template.base import resolve_variable, Node, TemplateSyntaxErrorregister = template.Library()@register.simple_tagdef my_simple_time(v1,v2,v3):return v1 + v2 + v3@register.simple_tagdef my_input(id,arg):result = "<input type='text' id='%s' class='%s' />" %(id,arg,)return mark_safe(result) View Codec、在使用自定義simple_tag的html文件中導(dǎo)入之前創(chuàng)建的 xx.py 文件名
{% load xx %}d、使用simple_tag
{% my_simple_time 1 2 3%}{% my_input 'id_username' 'hide'%}e、在settings中配置當(dāng)前app,不然django無(wú)法找到自定義的simple_tag
INSTALLED_APPS = ('django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles','app01',) View Code轉(zhuǎn)載于:https://www.cnblogs.com/luxiaojun/p/5818567.html
總結(jié)
以上是生活随笔為你收集整理的Django中级篇之模板语言的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: jQuery高度及位置操作
- 下一篇: [bzoj1059]矩阵游戏