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>