<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                # 第五節:自定義過濾器 # 自定義模版過濾器 雖然`DTL`給我們內置了許多好用的過濾器。但是有些時候還是不能滿足我們的需求。因此`Django`給我們提供了一個接口,可以讓我們自定義過濾器,實現自己的需求。 模版過濾器必須要放在`app`中,并且這個`app`必須要在`INSTALLED_APPS`中進行安裝。然后再在這個`app`下面創建一個`Python包`叫做`templatetags`。再在這個包下面創建一個`python文件`。比如`app`的名字叫做`book`,那么項目結構如下: ``` <pre class="calibre12">``` - book - views.py - urls.py - models.py - templatetags - my_filter.py ``` ``` 在創建了存儲過濾器的文件后,接下來就是在這個文件中寫過濾器了。過濾器實際上就是python中的一個函數,只不過是把這個函數注冊到模板庫中,以后在模板中就可以使用這個函數了。但是這個函數的參數有限制,第一個參數必須是這個過濾器需要處理的值,第二個參數可有可無,如果有,那么就意味著在模板中可以傳遞參數。**并且過濾器的函數最多只能有兩個參數**。在寫完過濾器后,再使用`django.template.Library`對象注冊進去。示例代碼如下: ``` <pre class="calibre12">``` <span class="hljs-keyword">from</span> django <span class="hljs-keyword">import</span> template <span class="hljs-title"># 創建模板庫對象</span> register = template.Library() <span class="hljs-title"># 過濾器函數</span> <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">mycut</span><span class="hljs-params">(value,mystr)</span>:</span> <span class="hljs-keyword">return</span> value.replace(mystr) <span class="hljs-title"># 將函數注冊到模板庫中</span> register.filter(<span class="hljs-string">"mycut"</span>,mycut) ``` ``` 以后想要在模板中使用這個過濾器,就要在模板中`load`一下這個過濾器所在的模塊的名字(也就是這個python文件的名字)。示例代碼如下: ``` <pre class="calibre12">``` {% load my_filter %} ``` ``` ### 自定義時間計算過濾器: 有時候經常會在朋友圈、微博中可以看到一條信息發表的時間,并不是具體的時間,而是距離現在多久。比如`剛剛`,`1分鐘前`等。這個功能`DTL`是沒有內置這樣的過濾器的,因此我們可以自定義一個這樣的過濾器。示例代碼如下: ``` <pre class="calibre12">``` <span class="hljs-title"># time_filter.py文件</span> <span class="hljs-keyword">from</span> datetime <span class="hljs-keyword">import</span> datetime <span class="hljs-keyword">from</span> django <span class="hljs-keyword">import</span> template register = template.Library() <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">time_since</span><span class="hljs-params">(value)</span>:</span> <span class="hljs-string">""" time距離現在的時間間隔 1. 如果時間間隔小于1分鐘以內,那么就顯示“剛剛” 2. 如果是大于1分鐘小于1小時,那么就顯示“xx分鐘前” 3. 如果是大于1小時小于24小時,那么就顯示“xx小時前” 4. 如果是大于24小時小于30天以內,那么就顯示“xx天前” 5. 否則就是顯示具體的時間 2017/10/20 16:15 """</span> <span class="hljs-keyword">if</span> isinstance(value,datetime): now = datetime.now() timestamp = (now - value).total_seconds() <span class="hljs-keyword">if</span> timestamp < <span class="hljs-params">60</span>: <span class="hljs-keyword">return</span> <span class="hljs-string">"剛剛"</span> <span class="hljs-keyword">elif</span> timestamp >= <span class="hljs-params">60</span> <span class="hljs-keyword">and</span> timestamp < <span class="hljs-params">60</span>*<span class="hljs-params">60</span>: minutes = int(timestamp / <span class="hljs-params">60</span>) <span class="hljs-keyword">return</span> <span class="hljs-string">"%s分鐘前"</span> % minutes <span class="hljs-keyword">elif</span> timestamp >= <span class="hljs-params">60</span>*<span class="hljs-params">60</span> <span class="hljs-keyword">and</span> timestamp < <span class="hljs-params">60</span>*<span class="hljs-params">60</span>*<span class="hljs-params">24</span>: hours = int(timestamp / (<span class="hljs-params">60</span>*<span class="hljs-params">60</span>)) <span class="hljs-keyword">return</span> <span class="hljs-string">"%s小時前"</span> % hours <span class="hljs-keyword">elif</span> timestamp >= <span class="hljs-params">60</span>*<span class="hljs-params">60</span>*<span class="hljs-params">24</span> <span class="hljs-keyword">and</span> timestamp < <span class="hljs-params">60</span>*<span class="hljs-params">60</span>*<span class="hljs-params">24</span>*<span class="hljs-params">30</span>: days = int(timestamp / (<span class="hljs-params">60</span>*<span class="hljs-params">60</span>*<span class="hljs-params">24</span>)) <span class="hljs-keyword">return</span> <span class="hljs-string">"%s天前"</span> % days <span class="hljs-keyword">else</span>: <span class="hljs-keyword">return</span> value.strftime(<span class="hljs-string">"%Y/%m/%d %H:%M"</span>) <span class="hljs-keyword">else</span>: <span class="hljs-keyword">return</span> value register.filter(<span class="hljs-string">"time_since"</span>,time_since) ``` ``` 在模版中使用的示例代碼如下: ``` <pre class="calibre12">``` {% load time_filter %} ... {% value|time_since %} ... ``` ``` 為了更加方便的將函數注冊到模版庫中當作過濾器。也可以使用裝飾器來將一個函數包裝成過濾器。示例代碼如下: ``` <pre class="calibre12">``` <span class="hljs-keyword">from</span> django <span class="hljs-keyword">import</span> template register = template.Library() <span class="hljs-class">@register.filter(name='mycut')</span> <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">mycut</span><span class="hljs-params">(value,mystr)</span>:</span> <span class="hljs-keyword">return</span> value.replace(mystr,<span class="hljs-string">""</span>) ``` ```
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看