亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫(kù)
最近訪問(wèn)板塊 發(fā)新帖
查看: 3356 | 回復(fù): 0
打印 上一主題 下一主題

Django中的模板與JSTL對(duì)比學(xué)習(xí)下 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2009-10-10 10:12 |只看該作者 |倒序?yàn)g覽

模板標(biāo)簽和過(guò)濾器基礎(chǔ)
我們已經(jīng)提到模板系統(tǒng)使用內(nèi)建的標(biāo)簽和過(guò)濾器
這里我們看看常見(jiàn)的,附錄6包含了完整的內(nèi)建標(biāo)簽和過(guò)濾器,你自己熟悉那個(gè)列表來(lái)了解可以做什么是個(gè)好主意
if/else
{% if %}標(biāo)簽計(jì)算一個(gè)變量值,如果是“true”,即它存在、不為空并且不是false的boolean值
系統(tǒng)則會(huì)顯示{% if %}和{% endif %}間的所有內(nèi)容:
代碼

{% if today_is_weekend %}   
  •     p>Welcome to the weekend!p>  {% else %}   
  •     p>Get back to work.p>  {% endif %}  
    {% if %}標(biāo)簽接受and,or或者not來(lái)測(cè)試多個(gè)變量值或者否定一個(gè)給定的變量,例如:
    代碼

    {% if athlete_list and coach_list %}   
  •      Both athletes and coaches are available.   {% endif %}   
  • {% if not athlete_list %}        There are no athletes.   
  • {% endif %}   {% if athlete_list or coach_list %}   
  •      There are some athletes or some coaches.   {% endif %}   
  • {% if not athlete_list or coach_list %}        There are no athletes or there are some coaches.   
  • {% endif %}   {% if athlete_list and not coach_list %}   
  •      There are some athletes and absolutely no coaches.   {% endif %}  
    {% if %}標(biāo)簽不允許同一標(biāo)簽里同時(shí)出現(xiàn)and和or,否則邏輯容易產(chǎn)生歧義,例如下面的標(biāo)簽是不合法的:
    代碼

    {% if athlete_list and coach_list or cheerleader_list %}  
    如果你想結(jié)合and和or來(lái)做高級(jí)邏輯,只需使用嵌套的{% if %}標(biāo)簽即可:
    代碼

    {% if athlete_list %}   
  •      {% if coach_list or cheerleader_list %}            We have athletes, and either coaches or cheerleaders!   
  •      {% endif %}   {% endif %}  
    多次使用同一個(gè)邏輯符號(hào)是合法的:
    代碼

    {% if athlete_list or coach_list or parent_list or teacher_list %}  
    沒(méi)有{% elif %}標(biāo)簽,使用嵌套的{% if %}標(biāo)簽可以做到同樣的事情:
    代碼

    {% if athlete_list %}   
  •     p>Here are the athletes: {{ athlete_list }}.p>  {% else %}   
  •     p>No athletes are available.p>       {% if coach_list %}   
  •         p>Here are the coaches: {{ coach_list }}.p>       {% endif %}   
  • {% endif %}  
    確認(rèn)使用{% endif %}來(lái)關(guān)閉{% if %}標(biāo)簽,否則Django觸發(fā)TemplateSyntaxError

    for
    {% for %}標(biāo)簽允許你按順序遍歷一個(gè)序列中的各個(gè)元素
    Python的for語(yǔ)句語(yǔ)法為for X in Y,X是用來(lái)遍歷Y的變量
    每次循環(huán)模板系統(tǒng)都會(huì)渲染{% for %}和{% endfor %}之間的所有內(nèi)容
    例如,顯示給定athlete_list變量來(lái)顯示athlete列表:
    代碼

    ul>  
  • {% for athlete in athlete_list %}       li>{{ athlete.name }}li>  
  • {% endfor %}   ul>  
    在標(biāo)簽里添加reversed來(lái)反序循環(huán)列表:
    代碼

    {% for athlete in athlete_list reversed %}   
  • ...   {% endfor %}   
  • {% for %}標(biāo)簽可以嵌套:   {% for country in countries %}   
  •     h1>{{ country.name }}h1>      ul>  
  •      {% for city in country.city_list %}           li>{{ city }}li>  
  •      {% endfor %}       ul>  
  • {% endfor %}  
    系統(tǒng)不支持中斷循環(huán),如果你想這樣,你可以改變你想遍歷的變量來(lái)使得變量只包含你想遍歷的值
    類(lèi)似的,系統(tǒng)也不支持continue語(yǔ)句,本章后面的“哲學(xué)和限制”會(huì)解釋設(shè)計(jì)的原則
    {% for %}標(biāo)簽內(nèi)置了一個(gè)forloop模板變量,這個(gè)變量含有一些屬性可以提供給你一些關(guān)于循環(huán)的信息
    1,forloop.counter表示循環(huán)的次數(shù),它從1開(kāi)始計(jì)數(shù),第一次循環(huán)設(shè)為1,例如:
    代碼

    {% for item in todo_list %}   
  •     p>{{ forloop.counter }}: {{ item }}p>  {% endfor %}  
    2,forloop.counter0類(lèi)似于forloop.counter,但它是從0開(kāi)始計(jì)數(shù),第一次循環(huán)設(shè)為0
    3,forloop.revcounter表示循環(huán)中剩下的items數(shù)量,第一次循環(huán)時(shí)設(shè)為items總數(shù),最后一次設(shè)為1
    4,forloop.revcounter0類(lèi)似于forloop.revcounter,但它是表示的數(shù)量少一個(gè),即最后一次循環(huán)時(shí)設(shè)為0
    5,forloop.first當(dāng)?shù)谝淮窝h(huán)時(shí)值為T(mén)rue,在特別情況下很有用:
    代碼

    {% for object in objects %}   
  •      {% if forloop.first %}li class="first">{% else %}li>{% endif %}        {{ object }}   
  •     li>  {% endfor %}  
    6,forloop.last當(dāng)最后一次循環(huán)時(shí)值為T(mén)rue
    代碼

    {% for link in links %}{{ link }}{% if not forloop.last %} | {% endif %}{% endfor %}  
    7,forloop.parentloop在嵌套循環(huán)中表示父循環(huán)的forloop:
    代碼

    {% for country in countries %}   
  •     table>       {% for city in country.city_list %}   
  •         tr>              td>Country #{{ forloop.parentloop.counter }} td>  
  •             td>City #{{ forloop.counter }}td>              td>{{ city }}td>  
  •         tr>       {% endfor %}   
  •     table>  {% endfor %}  
    富有魔力的forloop變量只能在循環(huán)中得到,當(dāng)模板解析器到達(dá){% endfor %}時(shí)forloop就消失了
    如果你的模板context已經(jīng)包含一個(gè)叫forloop的變量,Django會(huì)用{% for %}標(biāo)簽替代它
    Django會(huì)在for標(biāo)簽的塊中覆蓋你定義的forloop變量的值
    在其他非循環(huán)的地方,你的forloop變量仍然可用
    我們建議模板變量不要使用forloop,如果你需要這樣做來(lái)訪問(wèn)你自定義的forloop,你可以使用forloop.parentloop

    ifequal/ifnotequal
    Django模板系統(tǒng)并不是一個(gè)嚴(yán)格意義上的編程語(yǔ)言,所以它并不允許我們執(zhí)行Python語(yǔ)句
    (我們會(huì)在‘哲學(xué)和限制‘一節(jié)詳細(xì)討論)。
    然而在模板語(yǔ)言里比較兩個(gè)值并且在他們一致的時(shí)候顯示一些內(nèi)容,確實(shí)是一個(gè)在常見(jiàn)不過(guò)的需求了——所以Django提供了ifequal標(biāo)簽。
    {% ifequal %}比較兩個(gè)值,如果相等,則顯示{% ifequal %}和{% endifequal %}之間的所有內(nèi)容:
    代碼

    {% ifequal user currentuser %}   
  •     h1>Welcome!h1>  {% endifequal %}  
    參數(shù)可以是硬編碼的string,單引號(hào)和雙引號(hào)均可,下面的代碼是合法的:
    代碼

    {% ifequal section 'sitenews' %}   
  •     h1>Site Newsh1>  {% endifequal %}   
  • {% ifequal section "community" %}       h1>Communityh1>  
  • {% endifequal %}  
    和{% if %}一樣,{% ifequal %}標(biāo)簽支持{% else %}
    代碼

    {% ifequal section 'sitenews' %}   
  •     h1>Site Newsh1>  {% else %}   
  •     h1>No News Hereh1>  {% endifequal %}  
    其它的模板變量,strings,integers和小數(shù)都可以作為{% ifequal %}的參數(shù):
    代碼

    {% ifequal variable 1 %}   
  • {% ifequal variable 1.23 %}   {% ifequal variable 'foo' %}   
  • {% ifequal variable "foo" %}  
    其它的Python類(lèi)型,如字典、列表或booleans不能硬編碼在{% ifequal %}里面,下面是不合法的:
    代碼

    {% ifequal variable True %}   
  • {% ifequal variable [1, 2, 3,]%}   {% ifequal variable {'key': 'value'} %  
    如果你需要測(cè)試某個(gè)變量是true或false,用{% if %}即可

    注釋
    和HTML或編程語(yǔ)言如Python一樣,Django模板語(yǔ)言允許注釋{# #},如:
    代碼
    {# This is a comment #}  
    模板渲染時(shí)注釋不會(huì)輸出,一個(gè)注釋不能分成多行
    下面的模板渲染時(shí)會(huì)和模板中的內(nèi)容一樣,注釋標(biāo)簽不會(huì)解析成注釋
    This is a {# comment goes here
    and spans another line #}
    test.

    過(guò)濾器
    本章前面提到,模板過(guò)濾器是變量顯示前轉(zhuǎn)換它們的值的方式,看起來(lái)像下面這樣:
    代碼
    {{ name|lower }}  
    這將顯示通過(guò)lower過(guò)濾器過(guò)濾后{{ name }}變量的值,它將文本轉(zhuǎn)換成小寫(xiě)
    使用(|)管道來(lái)申請(qǐng)一個(gè)過(guò)濾器
    過(guò)濾器可以串成鏈,即一個(gè)過(guò)濾器的結(jié)果可以傳向下一個(gè)
    下面是escape文本內(nèi)容然后把換行轉(zhuǎn)換成p標(biāo)簽的習(xí)慣用法:
    代碼
    {{ my_text|escape|linebreaks }}  
    有些過(guò)濾器需要參數(shù),需要參數(shù)的過(guò)濾器的樣子:
    代碼

    {{ bio|truncatewords:"30" }}  
    這將顯示bio標(biāo)量的前30個(gè)字,過(guò)濾器參數(shù)一直使用雙引號(hào)
    下面是一些最重要的過(guò)濾器:
    1,addslashed,在任何后斜線,單引號(hào),雙引號(hào)前添加一個(gè)后斜線
    當(dāng)你把一些文本輸出到一個(gè)JavaScript字符串時(shí)這會(huì)十分有用
    2,date,根據(jù)一個(gè)格式化string參數(shù)來(lái)格式化date或datetime對(duì)象,例如:
    代碼

    {{ pub_date|date:"F j, Y" }}  
    格式化string會(huì)在附錄6定義
    3,escape,避免給定的string里出現(xiàn)and符,引號(hào),尖括號(hào)
    當(dāng)你處理用戶提交的數(shù)據(jù)和確認(rèn)合法的XML和XHTML數(shù)據(jù)時(shí)這將很有用
    escape將作如下的一些轉(zhuǎn)換:
    代碼

    Converts & to &   
  • Converts Converts > to >   
  • Converts "(雙引號(hào)) to "   Converts '(單引號(hào)) to '   
    4,length,返回值的長(zhǎng)度,你可以在一個(gè)list或string上做此操作
    或者在任何知道怎樣決定自己的長(zhǎng)度的Python對(duì)象上做此操作(即有一個(gè)__len__()方法的對(duì)象)
                   
                   
                   

    本文來(lái)自ChinaUnix博客,如果查看原文請(qǐng)點(diǎn):http://blog.chinaunix.net/u2/84280/showart_2066875.html
  • 您需要登錄后才可以回帖 登錄 | 注冊(cè)

    本版積分規(guī)則 發(fā)表回復(fù)

      

    北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
    未成年舉報(bào)專(zhuān)區(qū)
    中國(guó)互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
    感謝所有關(guān)心和支持過(guò)ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

    清除 Cookies - ChinaUnix - Archiver - WAP - TOP