django 模板语言之 filter 自定义模板

 

 

可以自己写python函数放在模板语言里用

 

这种方法是django里面的 filter

 

{{ item.event_start|date:"Y-m-d H:i:s"}}
{{ bio|truncatewords:"30" }}
{{ my_list|first|upper }}
{{ name|lower }}

 

 

{{name|python的函数}} django内部把python函数放在模板中括号里面使用

 

 

在urls.py 添加tpl4 对应关系 路由关系

from django.conf.urls import url
from django.contrib import admin
from django.conf.urls import include
from app01 import views

urlpatterns = [
    # url(r'^admin/', admin.site.urls),
    # url(r'^index/', views.index),
    url(r'^tpl4/', views.tpl4),
]

 

app01 app项目下 的views.py tpl4函数

def tpl4(request):
    name = "YYDASDAS21312DASD"
    return render(request,"tpl4.html",{'name':name})

 

 

 

tpl4.html  

{{name|lower}}  把name的字符串变成小写

<!DOCTYPE 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>
</head>
<body>
    {{ name}}<br>
    {{ name|lower}}
</body>
</html>

 

 

 

 

 

自定义函数
simple_tag
a. app项目下创建templatetags目录
b. 创建任意xxoo.py文件 用做自定义py函数
  c. 创建template对象 register
在函数或者类 前面 加上创建的对象装饰器register  @register.filter
对象不能改名字 必须是register

register = template.Library()
   
@register.filter

#!/usr/bin/env python
#coding:utf-8
from django import template
from django.utils.safestring import mark_safe
   
register = template.Library()
   
@register.filter
def my_simple_time(v1,v2):
    return  v1 + v2

 

d.    
@register.filter
def func(a1,a2) 最多传两个参数
return "asdfasd"


e. settings中注册APP

f.在使用自定义filter的html文件中导入之前创建的 xx.py 文件名,
顶部 {% load xxoo %}

g.使用filter
格式
{{参数1|函数名:"参数2"}} 不能加空格,有限制
 {{参数1|函数名:数字}}  传数字参数

 py文件的函数有参数,需要传参数


缺点:
最多两个参数,不能加空格
优点:
能作为if条件




创建bgg.py 创建 函数 装饰器

 

bgg.py代码

@register.filter
from django import template
from django.utils.safestring import mark_safe

register = template.Library()

@register.filter
def BOO(a1,a2):
    print(a1,a2)
    return a1,a2

后台拿到
ok 5
[11/Dec/2018 01:31:31] "GET /tpl4/ HTTP/1.1" 200 278

 

 

tpl4.html 

 {{参数1|函数名:数字}}   {{a1|BOO:5}}
{% load bgg %}
<!DOCTYPE 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>
</head>
<body>
     {{ "ok"|BOO:5 }}
</body>
</html>

 

 

显示页面
 

 

 第二种方法显示

bgg.py
from django import template
from django.utils.safestring import mark_safe

register = template.Library()

@register.filter
def BOO(a1,a2):
    print(a1,a2)
    return a1,a2

 

后台拿到

ok helo
[11/Dec/2018 01:43:11] "GET /tpl4/ HTTP/1.1" 200 291

 

{{参数1|函数名:"参数2"}} 
{% load bgg %}
<!DOCTYPE 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>
</head>
<body>
     {{ "ok"|BOO:"helo" }}
</body>
</html>

 

 

 

 

posted @ 2018-12-11 15:36  minger_lcm  阅读(232)  评论(0编辑  收藏  举报