最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解django中自定義標(biāo)簽和過(guò)濾器

 更新時(shí)間:2017年07月03日 16:26:50   作者:MnCu  
本篇文章主要介紹了django中自定義標(biāo)簽和過(guò)濾器,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

想要實(shí)現(xiàn)自定義標(biāo)簽和過(guò)濾器需要進(jìn)行準(zhǔn)備工作:

準(zhǔn)備(必需)工作:

1  在某個(gè)app下創(chuàng)建一個(gè)名為templatetags(必需,且包名不可變)的包。假設(shè)我們?cè)诿麨閜olls的app下創(chuàng)建了一個(gè)templatetags的包,并在該包下創(chuàng)建了一個(gè)名為mytags的文件。那么目錄結(jié)構(gòu)看起來(lái)應(yīng)該就像這樣:

polls/
  __init__.py
  models.py
  templatetags/
    __init__.py
    mytags.py
  views.py

2  settings文件中的INSTALLD_APPS內(nèi)必須含有該app。接下來(lái),我們需要確認(rèn)settings文件中的INSTALLED_APPS變量中已經(jīng)有了polls

INSTALLED_APPS = (
  'django.contrib.admin',
  'django.contrib.auth',
  'django.contrib.contenttypes',
  'django.contrib.sessions',
  'django.contrib.messages',
  'django.contrib.staticfiles',
  'polls',
)

3  接下來(lái)在mytags文件中寫入如下幾行

from django import template

register = template.Library()

4  在模板中使用{% load %} 標(biāo)簽裝載自定義標(biāo)簽或者裝飾器

{% load mytags %}

自定義過(guò)濾器:

1  自定義過(guò)濾器實(shí)際上就是寫一個(gè)函數(shù)

2  django會(huì)將過(guò)濾器前的值傳入該函數(shù)

3  函數(shù)完成后,需要進(jìn)行登記register

因?yàn)榈诙絛jango已經(jīng)幫我們完成,所以我們實(shí)際上只需要自己完成第一步和第三步

實(shí)例:寫一個(gè)自動(dòng)省略多余字符串的過(guò)濾器 

1  定義一個(gè)  truncate_chars  函數(shù)

# 若字符串長(zhǎng)度大于30,則省略之后的內(nèi)容,否則原樣輸出該字符串。參數(shù)value就是過(guò)濾器前的值
def truncate_chars(value):
  if value.__len__() > 30:
    return '%s......'% value[0:30]
  else:
    return value

2  register該函數(shù)

# 登記
register.filter('truncate_chars',truncate_chars)
def truncate_chars(value):
  if value.__len__() > 30:
    return '%s......'% value[0:30]
  else:
    return value

Library.filter(name,function,is_safe=False,needs_autoescape=False,excepts_localtime=False)函數(shù)默認(rèn)需要兩個(gè)參數(shù),name是裝飾器的名稱(字符串類型),function是函數(shù)名。后面三個(gè)參數(shù)可以參考 官方文檔。 我們也可以通過(guò)裝飾器進(jìn)行登記

@register.filter(name='truncate_filter')
def truncate_chars(value):
  if value.__len__() > 30:
    return '%s......'% value[0:30]
  else:
    return value

如果沒(méi)有使用name參數(shù),django默認(rèn)會(huì)將函數(shù)名作為name參數(shù)的值,所以下面的代碼和上面的代碼作用相同。

@register.filter
def truncate_chars(value):
  if value.__len__() > 30:
    return '%s......'% value[0:30]
  else:
    return value

3  測(cè)試模板文件內(nèi)容

{% load mytags %}
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>
{{ 'alskdjasdfasdfasdffasdfasdfasdffasdffasdffasdffasdfasdffasdffalskdjasdfasdfasdffasdfasdfasdffasdffasdffasdffasdfasdffasdff'|truncate_chars }}
</body>
</html>

4  瀏覽器顯示結(jié)果

自定義標(biāo)簽

自定義標(biāo)簽相對(duì)于自定義過(guò)濾器來(lái)說(shuō)要復(fù)雜很多,因?yàn)樽远x標(biāo)簽可以做任何事情!

自定義標(biāo)簽分為很多類型

1  簡(jiǎn)單標(biāo)簽  Simple tags

2  內(nèi)含標(biāo)簽  Inclusion tags

3  分配標(biāo)簽  Assignment tags

一  簡(jiǎn)單標(biāo)簽

import datetime
from django import template

register = template.Library()

@register.simple_tag
def current_time(format_string):
  return datetime.datetime.now().strftime(format_string)

Library.simple_tag(takes_context=True)  takes_context=True參數(shù)可以讓我們?cè)L問(wèn)模板的當(dāng)前環(huán)境上下文,即將當(dāng)前環(huán)境上下文中的參數(shù)和值作為字典傳入函數(shù)中的一個(gè)名為context的參數(shù)

@register.simple_tag(takes_context=True)
def current_time(context, format_string):
  timezone = context['timezone']
  return your_get_current_time_method(timezone, format_string)

當(dāng)使用take_context=True時(shí),函數(shù)的第一個(gè)參數(shù)必需為context。也可以使用name參數(shù)對(duì)函數(shù)進(jìn)行重命名。

二  內(nèi)含標(biāo)簽

這種類型的標(biāo)簽可以被其他模板進(jìn)行渲染,然后將渲染結(jié)果輸出

Library.inclusion_tag()支持take_context=True,用法類似Library.simple_tag()

from django import template
register = template.Library()

@register.inclusion_tag('result.html')
def test():
  a=['first','second','third']
  return {'choices':a}

result.html 內(nèi)容

<ul>
{% for choice in choices %}
  <li> {{ choice }} </li>
{% endfor %}
</ul>

test.html內(nèi)容

{% load mytags %}
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>
{% test %}
</body>
</html>

view函數(shù):

def test(request):
  return render(request,'test.html')

當(dāng)訪問(wèn)http://127.0.0.1:8000/test/時(shí),瀏覽器顯示:

 

三  分配標(biāo)簽

類似于簡(jiǎn)單標(biāo)簽,但并不會(huì)輸出結(jié)果,可以使用 as 關(guān)鍵字將結(jié)果賦給一個(gè)參數(shù)。

@register.assignment_tag
def get_current_time(format_string):
  return datetime.datetime.now().strftime(format_string)
{% get_current_time "%Y-%m-%d %I:%M %p" as the_time %}
<p>The time is {{ the_time }}.</p>

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • python實(shí)現(xiàn)對(duì)文件中圖片生成帶標(biāo)簽的txt文件方法

    python實(shí)現(xiàn)對(duì)文件中圖片生成帶標(biāo)簽的txt文件方法

    下面小編就為大家分享一篇python實(shí)現(xiàn)對(duì)文件中圖片生成帶標(biāo)簽的txt文件方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-04-04
  • Python+PyQt5實(shí)現(xiàn)美劇爬蟲可視工具的方法

    Python+PyQt5實(shí)現(xiàn)美劇爬蟲可視工具的方法

    這篇文章主要介紹了Python+PyQt5實(shí)現(xiàn)美劇爬蟲可視工具的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • python繪制春節(jié)煙花的示例代碼

    python繪制春節(jié)煙花的示例代碼

    這篇文章主要介紹了使用python 實(shí)現(xiàn)的簡(jiǎn)單春節(jié)煙花效果的示例代碼,請(qǐng)注意,運(yùn)行本文的代碼之前,請(qǐng)確保計(jì)算機(jī)上已經(jīng)安裝了Pygame庫(kù),需要的朋友可以參考下
    2024-02-02
  • Python實(shí)現(xiàn)五子棋聯(lián)機(jī)對(duì)戰(zhàn)小游戲

    Python實(shí)現(xiàn)五子棋聯(lián)機(jī)對(duì)戰(zhàn)小游戲

    本文主要介紹了通過(guò)Python實(shí)現(xiàn)簡(jiǎn)單的支持聯(lián)機(jī)對(duì)戰(zhàn)的游戲——支持局域網(wǎng)聯(lián)機(jī)對(duì)戰(zhàn)的五子棋小游戲。廢話不多說(shuō),快來(lái)跟隨小編一起學(xué)習(xí)吧
    2021-12-12
  • Python生命游戲?qū)崿F(xiàn)原理及過(guò)程解析(附源代碼)

    Python生命游戲?qū)崿F(xiàn)原理及過(guò)程解析(附源代碼)

    這篇文章主要介紹了Python生命游戲?qū)崿F(xiàn)原理及過(guò)程解析(附源代碼),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-08-08
  • Python報(bào)錯(cuò)TypeError: ‘NoneType‘ object is not subscriptable的解決方法匯總

    Python報(bào)錯(cuò)TypeError: ‘NoneType‘ object is 

    在Python編程中,TypeError 是一個(gè)常見(jiàn)的錯(cuò)誤,它表明代碼中存在類型不匹配的問(wèn)題,TypeError: 'NoneType' object is not subscriptable 是一個(gè)具體的例子,本文將探討這個(gè)錯(cuò)誤的原因,并提供幾種解決方案,需要的朋友可以參考下
    2024-10-10
  • 關(guān)于nn.BatchNorm1d()用法及說(shuō)明

    關(guān)于nn.BatchNorm1d()用法及說(shuō)明

    這篇文章主要介紹了關(guān)于nn.BatchNorm1d()用法及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • 3個(gè)用于數(shù)據(jù)科學(xué)的頂級(jí)Python庫(kù)

    3個(gè)用于數(shù)據(jù)科學(xué)的頂級(jí)Python庫(kù)

    今天小編就為大家分享一篇關(guān)于3個(gè)用于數(shù)據(jù)科學(xué)的頂級(jí)Python庫(kù),小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2018-09-09
  • 如何用python反轉(zhuǎn)圖片,視頻

    如何用python反轉(zhuǎn)圖片,視頻

    這篇文章主要介紹了如何用python反轉(zhuǎn)圖片,視頻,幫助大家更好的利用python處理圖像,感興趣的朋友可以了解下
    2021-04-04
  • Pyqt5 實(shí)現(xiàn)多線程文件搜索的案例

    Pyqt5 實(shí)現(xiàn)多線程文件搜索的案例

    這篇文章主要介紹了Pyqt5 實(shí)現(xiàn)多線程文件搜索的案例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-03-03

最新評(píng)論

铜鼓县| 宝丰县| 巩留县| 华池县| 汤原县| 贵定县| 玉门市| 石渠县| 福建省| 利辛县| 泗洪县| 新丰县| 云浮市| 揭东县| 汉中市| 滕州市| 绥芬河市| 来安县| 阿勒泰市| 通化县| 松潘县| 榆树市| 三亚市| 瑞丽市| 东至县| 汉川市| 青海省| 潞城市| 乡城县| 安阳市| 乐东| 石家庄市| 武冈市| 阳山县| 张家港市| 鄂伦春自治旗| 东源县| 菏泽市| 万山特区| 苏尼特右旗| 庆安县|