可以自己写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>