Django模板
一、模板的组成
组成:HTML代码+逻辑控制代码
二、逻辑控制代码
1、变量:使用双大括号引起来的变量 例:
{ {name}}
<!--HTML模板-->
<body>
<h1 style="color: crimson">{
{ yeas }}--{
{ month}}--{
{ day }}</h1>
</body>
# python渲染
def dte(req, yeas, month, day):
return render(req, 'index1.html', {'yeas': yeas, 'month': month, 'day': day})
2、深度变量查找之句点号
模板不光能解析处理简单的字符串,还能处理更加复杂的数据结构,例如:list、dictionary和自定义的对象等。在 Django 模板中遍历复杂数据结构的关键是句点字符 (.)
列表:
def demo(request):
lis = ['张三', '李四', '王五']
return render(request, 'demo.html', {'lis': lis})
<div>这次展现的是列表第一个值----{
{lis.1}}</div>
字典:
<div>这次展现的是字典的值----{
{ map.name }}</div>
zidian = {'name': "张三", "age": "12", "sex": "男"}
return render(request, 'demo.html', {'map': zidian})
对象:
# 人物类
class Admin:
def __init__(self, name, age, sex):
self.name = name
self.age = age
self.sex = sex
def jieshao(self):
return '我的名字是%s,性别%s,今年%s岁' % (self.name, self.sex, self.age)
# view
zhangsan = Admin("张三","12","男")
return render(request, 'demo.html', {'zs': zhangsan})
<div>这次展示的是自定义对象的方法----{
{ zs.jieshao }}</div>
3、变量过滤器(filter)
语法:{ { obj | filter :parem}}———》{ {变量 | 过滤器函数 :参数}}
<!--常用过滤器-->
<!--
1 add : 给变量加上相应的值
2 addslashes : 给变量中的引号前加上斜线
3 capfirst : 首字母大写
4 cut : 从字符串中移除指定的字符
5 date : 格式化日期字符串
6 default : 如果值是False,就替换成设置的默认值,否则就是用本来的值
7 default_if_none: 如果值是None,就替换成设置的默认值,否则就使用本来的值
-->
<div>这次展示的是自定义对象的年龄加20----{
{ zs.age|add:20 }}</div>
<div>字符串第一个大写{
{ str|capfirst }}</div>
<div>字符串移除指定字符{
{ str|cut:" " }}</div>
<div>时间格式控制{
{ date|date:"Y-m-d" }}</div>
render(request, 'demo.html', {'strs': ''})
<div>空值则替换{
{ strs|default:'空的列表'}}</div> # 页面展示为“空的列表“
string = '<a href="12345/12345"> 12345</a>'
<div>渲染HTML标签{
{ strs|safe}}</div> <!--safe 会把标签渲染到页面而不是字符串-->
{% autoescape off %}
<div>{
{ strs }}</div>
{% endautoescape %} <!--这种渲染会直接渲染出a标签和safe相同-->
<!-- 显示渲染值大小{
{ a|filesizeformat }}
显示第一个值{
{ a|first }}
显示长度{
{ a|length }}
切割(参数为负值则从后往前切){
{ a|slice:"3" }}-->
4、控制语句之tag标签的使用
语法:{% 语句 %}
if—elif—else 判断
<!--if判断语句 -->
{% if zhangsan.age > 30 %}
<h1>{
{ zhangsan.name }}</h1>
{% elif zhangsan.age > 10 %}
<h1>{
{ zhangsan.jieshao }}</h1>
{% else %}
<h1>{
{ zhangsan.name }}年龄没超过10</h1>
{% endif %}
if嵌套
<!--if判断语句嵌套 -->
{% if zhangsan.age > 30 %}
{% if zhangsan.age < 50 %} <!--里层判断-->
<h1>{
{ zhangsan.name }}的年龄在30-50之间</h1>
{% else %}
<h1>{
{ zhangsan.name }}的年龄大于50</h1>
{% endif %} <!--每个end每个标签的结束标志-->
{% elif zhangsan.age > 10 %}
<h1>{
{ zhangsan.jieshao }}</h1>
{% else %}
<h1>{
{ zhangsan.name }}年龄没超过10</h1>
{% endif %}
for循环
<!--forloop.counter 循环计数器,
counter0从0开始计数,
forlooprevcounter倒序来
forloop.first第一次循环换返回true,否则返回false
-->
<ul>
{% for i in lis %}
{% if forloop.first %}
<li class="fir">
{% else %}
<li class="det">
{% endif %}
{
{ i }}
</li>
{% empty %} <!--empty 用来判断是否为空列表-->
<h1>没有数据</h1>
{% endfor %}
</ul>
csrf_token和url标签
<form action="{% url "login"%}" >
<input type="text">
<input type="submit"value="提交">
{%csrf_token%}
</form>
- {%csrf_token%}:防治跨站攻击验证
- {%url “引用地址”%}:引用路由配置
{%with%} :替换引用名
{% with str=lis123456 %}
{
{ str }}
{% endwith %}
- {%verbatim%}:禁止渲染,原样 python教程展现
小白技术分享
还没有评论,来说两句吧...