1.django经过模板动态的生成HTML
html
2.模板加载的位置(在setting.py中设置)python
DIRS决定模板路径的全局变量,APP_DIRS决定是否在应用目录中寻找模板django
3.模板引擎:Django框架经常使用Django模板引擎app
1.语法:{{模板变量名}} 显示模板变量框架
2.点语法访问复杂对象:函数
字典,对象(无参方法,除了self参数),列表(Django模板引擎不支持负数索引)oop
3.locals()函数返回一个字典,字典中包含的是当前局部变量的内容 post
from django.shortcuts import render def go_login(request): return render(request,'login.html')
————————————————————————————————————————————————————————————————————————————————————————————————————————————
def login(request):
postdata = request.POST
print('接收到的请求数据类型:',type(postdata))
logname = postdata.get('logname')
logpaw = postdata.get('logpwd')
if logname == 'tom' and logpaw == '123456':
return render(request,'welcome.html',{'username':logname})
else:
return render(request,'login.html',{'msg':'用户名或密码输入错误'})
—————————————————————————————————————————————————————————————————————————————————————————————————————————
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>login</title>
</head>
<body>
<h3 style="color:red">{{ msg }}</h3>
<form action="/myapp/login/" method="post">
用户名:<input type="text" name="logname"><br>
密 码:<input type="password" name="logpwd"><br>
<input type="submit" value="登陆">
</form>
</body>
</html>
-----------------------------------------------------------------------------------------------------------------
def pass_dict(request):
product_dict = {
'name': '雕牌洗衣粉',
'price': 12.4,
}
return render(request,'var/show_info.html',{'product':product_dict})
def pass_person(request):
per = Person('二傻',38)
return render(request,'var/show_info.html',{'person':per})
def pass_list(request):
fruits = ['苹果','香蕉','橘子']
return render(request,'var/show_info.html',{'fruits':fruits})
def pass_all(request):
product_dict = {
'name': '旺仔牛奶',
'price': 18,
}
per = Person('二傻', 38)
fruits = ['苹果', '香蕉', '橘子']
return render(request,'var/show_info.html',locals())
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>显示点语法访问模板变量</title>
</head>
<body>
<h3>商品名称(接收字典变量):{{ product.name }}</h3>
<h3>商品价格(接收字典变量):{{ product.price }}</h3>
<h3>人的姓名(接收类变量):{{ person.name }}</h3>
<h3>人的年龄:{{ person.age }}</h3>
<h3>人的动做:{{ person.say }}</h3>
<h3>水果列表:{{ fruits.1 }}</h3>
<h3>水果列表:{{ fruits.0 }}</h3>
<h3>商品名称(接收字典变量):{{ product_dict.name }}</h3>
<h3>商品价格(接收字典变量):{{ product_dict.price }}</h3>
<h3>人的姓名(接收类变量):{{ per.name }}</h3>
<h3>人的年龄:{{ per.age }}</h3>
<h3>人的动做:{{ per.say }}</h3>
<h3>水果列表:{{ fruits.1 }}</h3>
<h3>水果列表:{{ fruits.0 }}</h3>
</body>
</html>
1.if 标签 网站
1.1简单if标签ui
{% if 布尔值 %} 布尔值为True时,显示的内容
{% else %} 布尔值为False时,显示的内容
{% endif %} 注意:能够在if后添加and、or、not,逻辑判断符号。判断是否相等,使用"=="符号。
2.多分支if标签:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>if标签</title> </head> <body> {% if score >= 90 %} <h3>优秀</h3> {% elif score >= 80 %} <h3>良好</h3> {% elif score >= 70 %} <h3>通常</h3> {% elif score >= 60 %} <h3>及格</h3> {% else %} <h3>留级</h3> {% endif %} </body> </html>
--------------------------------------------------------------------------------------------------------
def show_info(request,score):
try:
score = float(score)
except:
score = 0
return render(request,'tag/if_demo.html',locals())
3.for标签
3.1.{% for 循环变量 in 循环序列 %}
{{ 循环变量 }}
{% empty %}
若是循环序列为空,执行此处
{% endfor %}
注意:使用for标签循环时,有一个forloop模板变量,用来记录当前循环进度的。
3.2 forloop的经常使用属性:counter、first、last。
若是要进行反向循环,则在for标签的循环序列后加上reversed。
用法举例:
forloop.last 是一个布尔值;在最后一次执行循环时被置为True。一个常见的用法是在一系列的连接之间
放置管道符(|)
{% for link in links %}{{ link }}
{% if not forloop.last %} | {% endif %}
{% endfor %}
另外一个常见的用途是为列表的每一个单词的加上逗号
{% for p in places %}
{{ p }}
{% if not forloop.last %}, {% endif %}
{% endfor %}
def show_list(request): countries = ['中国','美国','俄罗斯','法国',] #countries = [] navs = ['首页','推荐','西安','抖音','娱乐',] return render(request, 'tag/for_demo.html', locals())
---------------------------------------------------------------------------------------------------
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>for标签</title>
</head>
<body>
<ul>
{% for country in countries reversed %}
<li>{{ country }}</li>
{% endfor %}
<hr>
{% for nav in navs %}
{{ nav }}
{% if not forloop.last %}
|
{% endif %}
{% endfor %}
</ul>
</body>
</html>
3.include标签
include标签经常使用来包含那些固定不变的模板
{% include '包含的模板地址' %}
def go_include(request): return render(request,'tag/inlcude_demo.html')
-----------------------------------------------------------------------------------------------------
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
欢迎访问个人网站 <br>
这是网站的主题内容 <br>
…… <br>
<br>
{% include 'tag/footer.html' %}
</body>
</html>
----------------------------------------------------------------------------------------------------------------------
footer.html文件
友情连接:
<a href="htts//www.baidu.com">百度</a>
<a href="htts//www.360.com">360</a>
<a href="htts//www.sohu.com">搜狐</a>
<a href="htts//www.sougou.com">搜狗</a>
4.模板继承标签
父模板(基模板)提早定义若干个block块标签,子模板能够继承、重写、添加父模板block块中的内容。
子模板经过{% extends '父模板位置' %}继承父模板。
父模板使用
{% block 块名称 %}
{% endblock %}
进行“挖坑”,子模板“填坑”。
子模板若是想要在父模板的某个块中添加内容,则先要使用{{ block.super }}获取父模板中该块的内容。
def go_child(request): return render(request,'tag/child.html',{'info':'西安将会是国际化大农村'})
-------------------------------------------------------------------------------------------
parent.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>{% block title %}{% endblock %}</title>
</head>
<body>
<h3>西安市委官方网站</h3>
{% block content %}
{% endblock %}
{% block slogon %}
<h3>为人民服务</h3>
{% endblock %}
<hr>
如下是视图函数view传递过来的数据:
{{ info }}
</body>
</html>
_________________________________________________________________________________________________________
child.html
{% extends 'tag/parent.html' %}
{% block title %}
西安欢迎你
{% endblock %}
{% block content %}
市委书记:王永康 <br>
市委副书记:暂无 <br>
其余人员。。。 <br>
{% endblock %}
{% block slogon %}
{{ block.super }}
<h3>加油,加油</h3>
{{ block.super }}
{% endblock %}
1.做用:在变量显示以前修改他的值
2.使用方法:模板变量后面添加管道符|,管道符后是过滤器名称
3.经常使用模板过滤器:
3.1. length 获取模板变量对应值的长度
3.2.first 获取第一个元素
3.3.upper 变为大写
3.4.lower 变为小写
3.5.truncatewords:"字符数" 截取指定数量的字符,该过滤器须要参数
3.6.date 显示日期,该过滤器须要参数,eg: date:"Y-m-d H:i:s"
3.7.addslashes 在单引号、双引号、反斜线前添加斜线
3.8.add:"添加的数字" 在模板变量上添加指定的数据
def show_filter(request): s = 'hello django,hello world ,hello python' num = 100 say = 'He said:"you are stupid!"' t = datetime.now() info = '<h3>这是传递的infoxinxi</h3>' return render(request,'filter/fileter_demo.html',locals())
-------------------------------------------------------------------------------------------------------------
filter_demo.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>演示模板过滤器</title>
</head>
<body>
<h3>传递的字符串的长度:{{ s|length }}</h3>
<h3>传递的字符串首字母大写:{{ s|capfirst }}</h3>
<h3>连续调用过滤器使首字母大写{{ s| first|upper}}</h3>
<h3>选取前1个单词:{{ s| truncatewords:'5'}}</h3>
<h3>选取前1个单词:{{ s| truncatechars:'5'}}</h3>
<h3>当前时间:{{ t|date:'Y-m-d H:i:s' }}</h3>
<h3>addslashes过滤器{{ say|addslashes }}</h3>
<h3>给变量添加5:{{ num|add:5 }}</h3>
<h3>未加safe过滤器{{ info }}</h3>
<h3>添加加safe过滤器{{ info |safe}}</h3>
</body>
</html>
4.自定义过滤器
自定义过滤器的步骤:
4.1.在app目录下创建templatetags包(包含__init__文件),并在此包下创建本身的过滤器模块(例如:myfilter.py)
4.2.在自定义的过滤器模块中编写:
from django import template
register = template.Library()
并使用装饰器@register.filter装饰一个函数,这个函数就是过滤器的具体调用,第一个参数是传递过来的模板变量;若是须要对该过滤器设置参数,还须要传递第二个参数
4.3.在模板中加载过滤器模块 {% load myfilter %}
自定义的过滤器
from django import template register = template.Library() #该对象能够用来注册模板过滤器 @register.filter(name='Chinese_upper') def number_to_upper(value,s): try: return ['零','壹','贰','叁','肆','伍','陆','柒','捌','玖'][value] + '\t' + s except: return '参数有误'
----------------------------------------------------------------------------------------------------
<!DOCTYPE html>
{% load myfilter %}
<html lang="en">
<head>
<meta charset="UTF-8">
<title>自定义过滤器</title>
</head>
<body>
{{ num|Chinese_upper:"李逼 "}}
</body>
</html>
----------------------------------------------------------------------------------------------------------------------
def show_custom_filter(request,num):
return render(request,'filter/custom_filter.html',locals())
——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
from django import template
register = template.Library() #该对象能够用来注册模板过滤器
@register.filter(name='dictfilter')
def get_dict_value(value,key):
return value[key]
---------------------------------------------------------------------------------------------------------------
def show_values(request):
mydict={
'sport':'football',
'fruit':'apple',
}
return render(request,'values.html',locals())
---------------------------------------------------------------------------------------------------------------
<!DOCTYPE html>{% load myfilter1 %}<html lang="en"><head> <meta charset="UTF-8"> <title>自定义模板过滤器</title></head><body> key为sport的值为{{ mydict|dictfilter:'sport' }}<br> key为fruit的值为{{ mydict|dictfilter:'fruit' }}<br></body></html>