django基礎篇04-自定義simple_tag和fitler

自定義simple_tag

  • app目錄下建立templatetags目錄
  • templatetags目錄下建立xxpp.py
  • 建立template對象register,注意變量名必須爲register
  • @register.simple_tag
    def func(arg1,arg2):
        pass
  • settings.py文件中註冊app,INSTALLED_APPS = ['app']
  • 模版文件頂部{% load xxoo %}
  • {{ 函數名 參數一 參數二}}

django如何傳遞參數給template對象的?html

沒錯,就是經過views.py的函數傳遞,例如 render(request,'xxx.html',{'xx':'oo'}),還有其餘的方式嗎?其實還有url的方式傳遞參數,這裏再也不贅述django

今天,咱們講解一下template對象,如何與py進行交互,這裏的py是指單獨的py文件,而不是基於django的py文件app

下面看一段簡單的代碼

首先,咱們在app01文件夾下建立一個templatetags目錄,而後在建立xxoo.pyide

from django import template from django.utils.safestring import mark_safe register = template.Library() @register.simple_tag def simple_01(): return 'Python'
xxoo.py

 而後模板文件index.html函數

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

    <div> {% simple_01 %} </div>
</body>
</html>
index.html

注意:自定義simple_tag的4個注意事項url

  一、在模版文件中 {% load py文件 %}
spa

  二、settings.py文件中,註冊app,本文自建立app01,因此在INSTALLED_APPS = ['app01']
3d

  三、在app01目錄下建立目錄templatetags,注意必須在app01目錄下
code

  四、建立template對象時,變量名固定,必須register,必須爲register,必須爲register
htm

  五、必須重啓服務

接下來神奇的事情發生了

進階

在以前基礎上,咱們加上參數

from django import template from django.utils.safestring import mark_safe register = template.Library() @register.simple_tag def simple_02(a,b): return a + b
xxoo.py
{% load xxoo %} <!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <div> {% simple_02 1 2 %} </div>
</body>
</html>
index.html

自定義filter

  • app目錄下建立templatetags目錄
  • templatetags目錄下建立xxoo.py文件
  • 建立template的register對象,注意變量名必須爲register
  • @register.filter
    def func(arg1,arg2):
        pass
  • settings.py中註冊app,INSTALLED_APPS = ['app']
  • 模版文件頂部{% load xxoo %}
  • {{ 參數一|函數名:'參數二,參數三'}}  {{ 參數一|函數名:參數二 }},注意:函數名和參數二之間不能有空格
from django import template
from django.utils.safestring import mark_safe

register = template.Library()

@register.filter
def simple_03(a,b):
    return a +'-'+ b
xxoo.py
{% load xxoo %}

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <div>
        {{ '張傑'|simple_03:'謝娜' }}
    </div>
</body>
</html>
index.html

自定義simple_tag和filter的優缺點

simple_tag

優勢:能夠傳多個參數

缺點:不能做爲if語句的條件

filter

優勢:能夠做爲if語句的條件

缺點:參數最多隻能傳2個,並且不能有空格,其餘的只能經過字符串拼接,而後在分割

相關文章
相關標籤/搜索