亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

python 之 Django框架(模板系統、過濾器、simple_tag

系統 1847 0

12.35 Django模板系統

{{ }}和 {% %},變量相關的用{{}},邏輯相關的用{%%}

app02/views:

            
              #
            
            
               模板語言測試函數
            
            
              def
            
            
               template_test(request):
    name 
            
            = 
            
              "
            
            
              張三
            
            
              "
            
            
              
    dic 
            
            = {
            
              "
            
            
              name
            
            
              "
            
            : 
            
              "
            
            
              張三
            
            
              "
            
            , 
            
              "
            
            
              age
            
            
              "
            
            : 16, 
            
              "
            
            
              items
            
            
              "
            
            : 
            
              "
            
            
              sb
            
            
              "
            
            
              }
    list1 
            
            = [11, 22, 33, 44, 55
            
              ]
?
    
            
            
              class
            
            
               Person(object):
        
            
            
              def
            
            
              __init__
            
            
              (self, name):
            self.name 
            
            =
            
               name
?
        
            
            
              def
            
            
               dream(self):
            
            
            
              return
            
            
              "
            
            
              {}在做白日夢
            
            
              "
            
            
              .format(self.name)
    p1 
            
            = Person(
            
              "
            
            
              張三豐
            
            
              "
            
            
              )
    
            
            
              import
            
            
               datetime
    today 
            
            =
            
               datetime.datetime.today()
?
    
            
            
              return
            
            
               render(
        request,
        
            
            
              "
            
            
              template_test.html
            
            
              "
            
            
              ,
        {
            
            
            
              "
            
            
              name
            
            
              "
            
            
              : name,
            
            
            
              "
            
            
              dic
            
            
              "
            
            
              : dic,
            
            
            
              "
            
            
              list
            
            
              "
            
            
              : list1,
            
            
            
              "
            
            
              obj
            
            
              "
            
            
              : p1,
            
            
            
              "
            
            
              box
            
            
              "
            
            : 
            
              "
            
            
              黑盒子
            
            
              "
            
            
              ,
            
            
            
              "
            
            
              filesize
            
            
              "
            
            : 1234567890
            
              ,
            
            
            
              "
            
            
              today
            
            
              "
            
            
              : today,
            
            
            
              "
            
            
              str
            
            
              "
            
            : 
            
              "
            
            
              
            
            
              "
            
            
              ,
            
            
            
              "
            
            
              words
            
            
              "
            
            : 
            
              """
            
            
              
                先帝創業未半而中道崩殂
            
            
            
              """
            
            
              
        }
    )
            
          

template_test.html:

            {
            
              { dic.name 
            
            }
            
              } 
            
            {
            
              { dic.age 
            
            }
            
              }    #張三  16

            
            {
            
              { dic.items 
            
            }
            
              }                #Django的模板語言中屬性的優先級大于方法的優先級  sb

            
            {
            
              { obj.name 
            
            }
            
              }                 #張三豐

            
            {
            
              { obj.dream 
            
            }
            
              }                #張三豐在做白日夢   模板語言中調用綁定方法不需要加括號
            
          
12.351 過濾器

在Django的模板語言中,通過使用 過濾器 來改變變量的顯示, 過濾器的語法: {{ value|filter_name:參數 }}

使用管道符"|"來應用過濾器

例如:{{ name|lower }}會將name變量應用lower過濾器之后再顯示它的值。lower在這里的作用是將文本全都變成小寫。

template_test.html:

            
            
            {
            
              { list 
            
            }
            
              }                     #[11, 22, 33, 44, 55]

            
            {
            
              { list.0 
            
            }
            
              }                   #索引取值:11

            
            {
            
              { list|first 
            
            }
            
              }               # 11

            
            {
            
              { list|length 
            
            }
            
              }              #返回值的長度,作用于字符串和列表  5

            
            {
            
              { list|slice
            
            :
            
              "2:-1" 
            
            }
            
              }         #切片:[33,44]

            
            {
            
              { ['a','b']|join
            
            :
            
              "*" 
            
            }
            
              }        #"a*b"

            
            {
            
              { box|default
            
            :
            
              "空盒子" 
            
            }
            
              }      #如果box沒有傳值或者值為空的話就顯示默認值,否則使用變量的值

            
            {
            
              { filesize|filesizeformat 
            
            }
            
              }   #格式化文件大小  1.1G

            
            {
            
              { today|date
            
            :
            
              "Y-m-d H:i:s" 
            
            }
            
              }  #格式化日期格式  

            
            {
            
              { str|safe 
            
            }
            
              }                  #取消轉義,直接應用HTML標簽

            
            {
            
              { words|truncatechars
            
            :
            
              9 
            
            }
            
              }     #字符串字符多于指定的字符數量會被截斷,截斷的字符串將以(“...”)結尾

            
            {
            
              { words|truncatewords
            
            :
            
              9
            
            }
            
              }      #在一定數量的字后截斷字符串,截斷的字符串將以(“...”)結尾

            
            {
            
              { i love you|cut
            
            :
            
              ' ' 
            
            }
            
              }        #移除value所有的與給出的變量相同的字符串,輸出'iloveyou'

            
            {
            
              { 1|add
            
            :
            
              1 
            
            }
            
              }                  # 2  #add可以數字加法,拼接字符串,拼接列表

            
            {
            
              { name|upper 
            
            }
            
              }               # NAME
?

            
          

timesince:將日期格式設為自該日期起的時間(例如,“4天,6小時”),blog_date是表示2006年6月1日午夜的日期實例,并且comment_date是2006年6月1日08:00的日期實例,則以下將返回“8小時”:

            {
            
              { blog_date|timesince
            
            :
            
              comment_date 
            
            }
            
              }
            
          
12.352 自定義filter
            
              app02:
    
            
            
              __init__
            
            
              .py
    models.py
    templatetags:         
            
            
              #
            
            
               在app02下面新建一個名為templatetags的(Python package)包
            
            
              __init__
            
            
              .py
        app02_filters.py  
            
            
              #
            
            
               建一個存放自定義filter的文件
            
            
    views.py
          

編寫自定義filter:

app02_filters.py :

            
              from
            
             django 
            
              import
            
            
               template
register 
            
            = template.Library()   
            
              #
            
            
               生成一個用于注冊自定義filter方法的實例
            
            
              ?
@register.filter(name
            
            =
            
              "
            
            
              sb
            
            
              "
            
            
              )

            
            
              def
            
            
               add_sb(value):
    
            
            
              return
            
            
              "
            
            
              {} sb
            
            
              "
            
            
              .format(value)
?
@register.filter(name
            
            =
            
              "
            
            
              cut
            
            
              "
            
            
              )

            
            
              def
            
            
               cut(value, arg):
    
            
            
              return
            
             value.replace(arg, 
            
              ""
            
            )
          

template_test.html:

            {
            
              % load app02_filters %
            
            }
            
                      # 先導入我們自定義filter那個文件 
?

            
            {
            
              { name 
            
            }
            
              }                      #張三

            
            {
            
              { name|sb 
            
            }
            
              }                   #張三 sb

            
            {
            
              { name|cut
            
            :
            
              "三" 
            
            }
            
              }              #張
            
          

注意:

過濾器支持“鏈式”操作。即一個過濾器的輸出作為另一個過濾器的輸入。 過濾器可以接受參數,例如:{{ sss|truncatewords:30 }},這將顯示sss的前30個詞。 過濾器參數包含空格的話,必須用引號包裹起來。比如使用逗號和空格去連接一個列表中的元素, 如:{{ list|join:', ' }} ':'左右沒有空格

12.353 simple_tag

和自定義filter類似,但接收更靈活的參數

定義注冊simple_tag:文件名:app01_my_simple_tags

            
              from
            
             django 
            
              import
            
            
               template
register 
            
            = template.Library()   
            
              #
            
            
               生成一個用于注冊simple_tag自定義方法的實例
            
            
              ?
@register.simple_tag(name
            
            =
            
              "
            
            
              plus
            
            
              "
            
            
              )

            
            
              def
            
            
               plus(a, b, c):
    
            
            
              return
            
            
              "
            
            
              {} + {} + {}
            
            
              "
            
            .format(a, b, c)
          

使用自定義simple_tag:

            {
            
              % load app01_my_simple_tags %
            
            }
            
              
?

            
            {
            
              % plus "1" "2" "abc" %
            
            }
            
                  #"12abc"
            
          
12.354 inclusion_tag

多用于返回html代碼片段

templatetags /inclusion_tag_test.py :

            
              from
            
             django 
            
              import
            
            
               template
register 
            
            =
            
               template.Library()
?
@register.inclusion_tag(
            
            
              '
            
            
              result.html
            
            
              '
            
            
              )

            
            
              def
            
            
               show_results(n):
    n 
            
            = 1 
            
              if
            
             n < 1 
            
              else
            
            
               int(n)
    data 
            
            = [ 
            
              for
            
             i 
            
              in
            
             range(1, n+1
            
              )]
    
            
            
              return
            
             {
            
              "
            
            
              data
            
            
              "
            
            : data}           
            
              #
            
            
              用字典給result.html傳值
            
          

templates/ result.html :

            
              
{ % for i in data % }
  • { { i } } { % endfor % }
  • templates/index.html:

                
                
                
                  <
                
                
                  html 
                
                
                  lang
                
                
                  ="en"
                
                
                  >
                
                
                  <
                
                
                  head
                
                
                  >
                
                
                  <
                
                
                  meta 
                
                
                  charset
                
                
                  ="UTF-8"
                
                
                  >
                
                
                  <
                
                
                  meta 
                
                
                  name
                
                
                  ="viewport"
                
                
                   content
                
                
                  ="width=device-width, initial-scale=1"
                
                
                  >
                
                
                  <
                
                
                  title
                
                
                  >
                
                inclusion_tag test
                
                  
                    title
                  
                  
                    >
                  
                  
                    
                      head
                    
                    
                      >
                    
                    
                      <
                    
                    
                      body
                    
                    
                      >
                    
                    
                      
    {% load inclusion_tag_test %}   #導入 inclusion_tag文件
    {% show_results 10 %}
    
                    
                    
                      
                        body
                      
                      
                        >
                      
                      
                        
                          html
                        
                        
                          >
                        
                      
                    
                  
                
              
    12.355 Tags

    for循環:

                
                  
    { % for user in user_list % }
  • { { forloop.counter } } #當前循環的索引值(從1開始)
  • { { forloop.counter0 } } #當前循環的索引值(從0開始)
  • { { forloop.revcounter } } #當前循環的倒序索引值(從1開始)
  • { { forloop.revcounter0 } } #當前循環的倒序索引值(從0開始) # { % if forloop.first % } #當前循環是不是第一次循環(布爾值) { % if forloop.last % } #當前循環是不是最后一次循環(布爾值)
  • { { user.name } } { % else % }
  • xxxxx
  • <% endif %>
    { % empty % } #if語句都沒執行時執行empty xxxxx { % endfor % }

    with: 定義一個中間變量,多用于給一個復雜的變量起別名

                {
                
                  % with total=business.employees.count %
                
                }
                
                         #注意等號左右不要加空格。
        
                
                {
                
                  { total 
                
                }
                
                  } employee
                
                {
                
                  { total|pluralize 
                
                }
                
                  }
    
                
                {
                
                  % endwith %
                
                }
                
                {
                
                  % with business.employees.count as total %
                
                }
        {
                
                  { total 
                
                }
                
                  } employee
                
                {
                
                  { total|pluralize 
                
                }
                
                  }
    
                
                {
                
                  % endwith %
                
                }
              

    for ... empty:

                
                  
    { % for user in user_list % }
  • { { user.name } } { % empty % }
  • 空空如也
  • { % endfor % }
    12.356 母版

    新建一個HTML文件(base.html),將公用的標簽放在base.html中作為母版,其他子頁面可以繼承此母版,避免代碼的重復和多次修改

    base.html:

                
                
                
                  <
                
                
                  html 
                
                
                  lang
                
                
                  ="en"
                
                
                  >
                
                
                  <
                
                
                  head
                
                
                  >
                
                
                  <
                
                
                  meta 
                
                
                  charset
                
                
                  ="UTF-8"
                
                
                  >
                
                
                  <
                
                
                  meta 
                
                
                  http-equiv
                
                
                  ="x-ua-compatible"
                
                
                   content
                
                
                  ="IE=edge"
                
                
                  >
                
                
                  <
                
                
                  meta 
                
                
                  name
                
                
                  ="viewport"
                
                
                   content
                
                
                  ="width=device-width, initial-scale=1"
                
                
                  >
                
                
                  <
                
                
                  title
                
                
                  >
                
                Title
                
                  
                    title
                  
                  
                    >
                  
                  
                    
      {% block page-css %}
      
      {% endblock %}
    
                  
                  
                    
                      head
                    
                    
                      >
                    
                    
                      <
                    
                    
                      body
                    
                    
                      >
                    
                    
                      
    {#導航條 開始#}
    {% include 'nav.html' %}
    {#導航條 結束#}
    
                    
                    
                      <
                    
                    
                      h1
                    
                    
                      >
                    
                    這是母板的標題
                    
                      
                        h1
                      
                      
                        >
                      
                      
                        
    {% block page-content %}
    ?
    {% endblock %}
    
                      
                      
                        <
                      
                      
                        h1
                      
                      
                        >
                      
                      母板底部內容
                      
                        
                          h1
                        
                        
                          >
                        
                        
                          
    {% block page-js %}
    ?
    {% endblock %}
    
                        
                        
                          
                            body
                          
                          
                            >
                          
                          
                            
                              html
                            
                            
                              >
                            
                          
                        
                      
                    
                  
                
              

    注意:我們通常會在母板中定義頁面專用的CSS塊和JS塊,方便子頁面替換。

    繼承母板:

    在子頁面中在頁面最上方使用下面的語法來繼承母板:

                {
                
                  % extends 'base.html' %
                
                }
    {
                
                  % block page-content %
                
                }
                
                  
    .....
    
                
                {
                
                  % endblock %
                
                }
              

    組件:

    可以將常用的頁面內容如導航條,頁尾信息等組件保存在單獨的文件中,然后在需要使用的地方按如下語法導入即可:

    nav.html: 導航條

                
                  
                
              

    xxx.html:

                
                
                
                  <
                
                
                  html 
                
                
                  lang
                
                
                  ="en"
                
                
                  >
                
                
                  <
                
                
                  head
                
                
                  >
                
                
                  <
                
                
                  meta 
                
                
                  charset
                
                
                  ="UTF-8"
                
                
                  >
                
                
                  <
                
                
                  title
                
                
                  >
                
                Title
                
                  
                    title
                  
                  
                    >
                  
                  
                    
                      head
                    
                    
                      >
                    
                    
                      <
                    
                    
                      body
                    
                    
                      >
                    
                    
                      
    ?
    {% include 'nav.html' %}                #在使用時通過{% include 組件文件 %}來引入公用組件
    
                    
                    
                      <
                    
                    
                      div 
                    
                    
                      class
                    
                    
                      ="container"
                    
                    
                      >
                    
                    
                      <
                    
                    
                      div 
                    
                    
                      class
                    
                    
                      ="row"
                    
                    
                      >
                    
                    
                      <
                    
                    
                      div 
                    
                    
                      class
                    
                    
                      ="page-header "
                    
                    
                      >
                    
                    
                      <
                    
                    
                      h1 
                    
                    
                      class
                    
                    
                      ="text-center"
                    
                    
                      >
                    
                    新增作者信息
                    
                      
                        h1
                      
                      
                        >
                      
                      
                        <
                      
                      
                        div 
                      
                      
                        class
                      
                      
                        ="col-md-6 col-md-offset-3"
                      
                      
                        >
                      
                      
                        
                .......
                
                      
                      
                        
                          div
                        
                        
                          >
                        
                        
                          
                            div
                          
                          
                            >
                          
                          
                            
                              div
                            
                            
                              >
                            
                            
                              
                                div
                              
                              
                                >
                              
                              
                                
                                  body
                                
                                
                                  >
                                
                                
                                  
                                    html
                                  
                                  
                                    >
                                  
                                
                              
                            
                          
                        
                      
                    
                  
                
              

    更多文章、技術交流、商務合作、聯系博主

    微信掃碼或搜索:z360901061

    微信掃一掃加我為好友

    QQ號聯系: 360901061

    您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

    【本文對您有幫助就好】

    您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

    發表我的評論
    最新評論 總共0條評論
    主站蜘蛛池模板: 涩涩在线 | 高清不卡毛片免费观看 | 久久的精品99精品66 | 一道本一区二区三区 | 好吊妞精品视频 | 天天操夜 | 青青久久精品国产免费看 | 国产视频www | 国产一级免费视频 | 日本在线观看永久免费网站 | 最新日本中文字幕 | 97夜夜澡人人爽人人免费 | 日韩一区二区中文字幕 | 国产三级日产三级日本三级 | 国内一级特黄女人精品片 | 久久91这里精品国产2020 | 爱婷婷网站在线观看 | 久久亚洲一级毛片 | 久久亚洲精品国产亚洲老地址 | 新久草| 国产高清狼人香蕉在线观看 | 国产成人久久精品推最新 | 欧美成人精品一区二三区在线观看 | 久青草香蕉精品视频在线 | 日本aaaa视频 | 亚洲欧美日产综合一区二区三区 | 国产理论自拍 | 久久99国产视频 | 久久国产视屏 | 四虎精品永久在线网址 | 手机在线看福利 | 91视频你懂的 | 精品一区二区三区免费毛片爱 | 日本高清视频不卡 | 蜜桃久久久 | 中文字幕91 | 四虎麻豆 | 亚洲综合激情九月婷婷 | 久久99精品综合国产首页 | 日本大片久久久高清免费看 | 一级a做爰片欧欧美毛片4 |