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

詳解django中自定義標簽和過濾器

 更新時間:2017年07月03日 16:26:50   作者:MnCu  
本篇文章主要介紹了django中自定義標簽和過濾器,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

想要實現自定義標簽和過濾器需要進行準備工作:

準備(必需)工作:

1  在某個app下創(chuàng)建一個名為templatetags(必需,且包名不可變)的包。假設我們在名為polls的app下創(chuàng)建了一個templatetags的包,并在該包下創(chuàng)建了一個名為mytags的文件。那么目錄結構看起來應該就像這樣:

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

2  settings文件中的INSTALLD_APPS內必須含有該app。接下來,我們需要確認settings文件中的INSTALLED_APPS變量中已經有了polls

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

3  接下來在mytags文件中寫入如下幾行

from django import template

register = template.Library()

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

{% load mytags %}

自定義過濾器:

1  自定義過濾器實際上就是寫一個函數

2  django會將過濾器前的值傳入該函數

3  函數完成后,需要進行登記register

因為第二步django已經幫我們完成,所以我們實際上只需要自己完成第一步和第三步

實例:寫一個自動省略多余字符串的過濾器 

1  定義一個  truncate_chars  函數

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

2  register該函數

# 登記
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)函數默認需要兩個參數,name是裝飾器的名稱(字符串類型),function是函數名。后面三個參數可以參考 官方文檔。 我們也可以通過裝飾器進行登記

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

如果沒有使用name參數,django默認會將函數名作為name參數的值,所以下面的代碼和上面的代碼作用相同。

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

3  測試模板文件內容

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

4  瀏覽器顯示結果

自定義標簽

自定義標簽相對于自定義過濾器來說要復雜很多,因為自定義標簽可以做任何事情!

自定義標簽分為很多類型

1  簡單標簽  Simple tags

2  內含標簽  Inclusion tags

3  分配標簽  Assignment tags

一  簡單標簽

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參數可以讓我們訪問模板的當前環(huán)境上下文,即將當前環(huán)境上下文中的參數和值作為字典傳入函數中的一個名為context的參數

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

當使用take_context=True時,函數的第一個參數必需為context。也可以使用name參數對函數進行重命名。

二  內含標簽

這種類型的標簽可以被其他模板進行渲染,然后將渲染結果輸出

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 內容

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

test.html內容

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

view函數:

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

當訪問http://127.0.0.1:8000/test/時,瀏覽器顯示:

 

三  分配標簽

類似于簡單標簽,但并不會輸出結果,可以使用 as 關鍵字將結果賦給一個參數。

@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>

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • python實現對文件中圖片生成帶標簽的txt文件方法

    python實現對文件中圖片生成帶標簽的txt文件方法

    下面小編就為大家分享一篇python實現對文件中圖片生成帶標簽的txt文件方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-04-04
  • Python+PyQt5實現美劇爬蟲可視工具的方法

    Python+PyQt5實現美劇爬蟲可視工具的方法

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

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

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

    Python實現五子棋聯機對戰(zhàn)小游戲

    本文主要介紹了通過Python實現簡單的支持聯機對戰(zhàn)的游戲——支持局域網聯機對戰(zhàn)的五子棋小游戲。廢話不多說,快來跟隨小編一起學習吧
    2021-12-12
  • Python生命游戲實現原理及過程解析(附源代碼)

    Python生命游戲實現原理及過程解析(附源代碼)

    這篇文章主要介紹了Python生命游戲實現原理及過程解析(附源代碼),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-08-08
  • Python報錯TypeError: ‘NoneType‘ object is not subscriptable的解決方法匯總

    Python報錯TypeError: ‘NoneType‘ object is 

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

    關于nn.BatchNorm1d()用法及說明

    這篇文章主要介紹了關于nn.BatchNorm1d()用法及說明,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • 3個用于數據科學的頂級Python庫

    3個用于數據科學的頂級Python庫

    今天小編就為大家分享一篇關于3個用于數據科學的頂級Python庫,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-09-09
  • 如何用python反轉圖片,視頻

    如何用python反轉圖片,視頻

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

    Pyqt5 實現多線程文件搜索的案例

    這篇文章主要介紹了Pyqt5 實現多線程文件搜索的案例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03

最新評論

沙洋县| 霍邱县| 锡林浩特市| 洛浦县| 井陉县| 武夷山市| 宜宾市| 稷山县| 无为县| 新沂市| 崇文区| 乳山市| 昌邑市| 新邵县| 岢岚县| 大竹县| 凤台县| 镇远县| 进贤县| 万源市| 华池县| 临泉县| 图木舒克市| 佛坪县| 台湾省| 广饶县| 泗水县| 财经| 铁岭县| 如东县| 盱眙县| 萝北县| 崇州市| 博白县| 蒙阴县| 侯马市| 社旗县| 溆浦县| 阿拉善盟| 广州市| 东源县|