views.py文件
from django.shortcuts import render, HttpResponse # Create your views here. from django.views import View class Mylgoin(View): def get(self, request): return render(request, 'login.html') def post(self, request): return HttpResponse('post请求') def index(request): # 模板语法可以传递的后端python数据类型 n = 123 f = 12.2 s = '字符串' l = ['小红', '姗姗', '花花'] b = False t = (111,222,333) d = {'username':'liu', 'age':18, 'info':'这个人有点意思','hoby':[123,222,333,{'info':"djknd"}]} se = {'静静', '洋洋'} # return render(request,'index.html', {}) lll = [] def func(): return '我是一个函数' class MyClass(object): def get_self(self): return 'self' @staticmethod def get_func(): return 'func' @classmethod def get_class(cls): return 'cls' # 对象被展示到html页面上,就类似于执行了打印操作,也就会会触法__str__方法 def __str__(self): return '触法__str__方法' obj = MyClass() # django模板语法的取值,是固定格式,只能采用“句点符” # 既可以点键也可以点索引,还可以两者混用 file_size = 123123123 import datetime current_time = datetime.datetime.now() info = 'jjddddddddddddddddd' egl = 'my name is jason my age is 18' msg = 'I am from China' hhh = '<h1>敏敏<h1>' return render(request,'index.html', locals())
mytag.py
from django import template register = template.Library() # 定义过滤器 @register.filter(name='baby') def my_sum(v1,v2): return v1+v2 # 自定义标签 @register.simple_tag(name='plus') def index(a,b,c,d): return '%s-%s-%s-%s'%(a,b,c,d) @register.inclusion_tag('left.html') def left(n): data = ['第{}项'.format(i) for i in range(n)] # return {'data':data} return locals() # 将data传递给html页面
index.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> {# <p>{{ n }}</p>#} {# <p>{{ f }}</p>#} {# <p>{{ s }}</p>#} {# <p>{{ b }}</p>#} {# <p>{{ l }}</p>#} {# <p>{{ t }}</p>#} {# <p>{{ d }}</p>#} {# <p>{{ se }}</p>#} {# <p> 传递函数名会自动加括号调用,但是模板语法不支持给函数传额外手的参数:{{ func }}</p>#} {##} {# <p>传类名的时候会自动加括号调用(实例化) {{ MyClass }}</p>#} {# <p> 内部能够自动判断当前变量名是否可以添加括号使用,如果可以就会自动执行 针对的是函数名和类名</p>#} {# <p>{{ obj }}</p>#} {# <p>{{ obj.get_class }}</p>#} {# <p>{{ obj.get_func }}</p>#} {# <p>{{ obj.get_self }}</p>#} {# <p>类中方法的调用</p>#} {# <br>#} {# <br>#} {#<p>{{ d.hoby.3.info }}</p>#} {##} {##} {# <p>过滤器就类似于是模板语法的内置方法 <br>#} {# django内置60多个的过滤器 了解10左右#} {# 基本语法#} {# {{ 数据|过滤器:参数 }}#} {##} {# </p>#} {# <h1>过滤器</h1>#} {# <p>统计长度:{{ s|length }}</p>#} {# <p>默认值:( 第一个参数布尔值是True就是展示第一个参数的值,否则就展示冒号后面的值 ){{ b|default:'ss'}}</p>#} {# <p>文件大小:{{ file_size|filesizeformat }}</p>#} {# <p>日期格式化:{{ current_time|date:'Y-m-d H:i:s' }}</p>#} {# <p>切片操作(支持步长):{{ l|slice: '0,4,2' }}</p>#} {# <p>切取字符(包含三个点){{ info|truncatechars:9 }}</p>#} {# <p>提取单词(不包含三个点 按照空格切){{ egl|truncatewords:9 }}</p>#} {# <p>移出特定的字符:{{ msg|cut:' ' }}</p>#} {# <p>拼接操作:{{ l|join:"$" }}</p>#} {# <p>拼接操作(加法):{{ n|add:10 }}</p>#} {# <p>拼接操作(加法):{{ s|add:msg }}</p>#} {# <p>取消转义:{{ hhh }}</p>#} {# <p>取消转义:{{ hhh|safe }}</p>#} {#<h1>标签</h1>#} {#{% for foo in l %}#} {# <p>{{ forloop }}</p>#} {# <p>{{ foo }}</p>#} {#{% endfor %}#} {##} {#{% if b %}#} {# <P>bady</P>#} {#{% elif s%}#} {# <p>都来</p>#} {#{% else %}#} {# <p>else</p>#} {#{% endif %}#} {# <p>--------------------------------------------------------------</p>#} {# <p></p>#} {##} {##} {#自定义标签,过滤器,inclusion_tag#} {# 三步走#} {# 1.在应用下创建一个名字为templatetags文件夹#} {# 2、在文件夹内创建“任意”名称的py文件#} {# 3、在该py文件中必须先书写一下两句话 (单词一个都不能错)#} {# from django import template#} {##} {# register = template.Library()#} <h1>自定义的使用</h1> {% load mytag %} <p>{{ n|baby:666 }}</p> <p>多个参数直接用空格隔开</p> <p>{% plus 'jason' 123 266 99 %}</p> 自定义inclusion_tag 内部原理 先定义一个方法 在页面上调用该方法,并且可以传值 该方法会自动生成一些数据然后传递给一个html页面 之后将渲染好的结果放到调用的位置 总结: 当html页面某一个地方的页面需要传递参数才能够动态渲染,并且在多个页面上都需要使用 到该局部,那么就考虑将该局部页面做成inclusion_tag形式 {% left 10 %} </body> </html>