一、循环语句
forlook.counter #计数,从1开始计数
forloop.counter0 #由小到大计数,从0开始
forloop.first #是否为第一个元素,输出TRue/False
forloop.last #是否为最后一个元素,输出TRue/False
forloop.parentloop #嵌套子循环时,输出父循环次数,由1开始
forloop.revcounter #由大到小计数,从1开始
forloop.revcounter0 #由大到小计数,从0开始
运用例子counter0:
{% for row in v1 %}
<tr hid="{{ row.nid }}" bid="{{ row.b_id }}">
<td>{{ forloop.counter0 }}</td>
<td>{{ row.hostname }}</td>
</tr>
{% endfor %}
倒叙显示:
{% for row in v1 reversed%}
<tr hid="{{ row.nid }}" bid="{{ row.b_id }}">
<td>{{ forloop.revcounter }}</td>
<td>{{ row.hostname }}</td>
</tr>
{% endfor %}
运用例子first:
{% for row in v1 %}
{% if forloop.first %}
<li class="first">{{ row.hostname }}---</li>
{% else %}
<li>{{ row.hostname }}</li>
{% endif %}
{% endfor %}
运用例子last:
{% for row in v1 %}
<span>
{{ row.hostname }}
{% if not forloop.last %}
--- <!--可自由替换为其他符号(|,/;)-->
{% endif %}
</span>
{% endfor %}
判断是否为空:
<!--方法1(判断hostname)-->
<td>{% if row.hostname %}
{{ row.hostname }}
{% else %}
---nan---
{% endif %}
</td>
<!--方法2(判断v1)-->
{% for row in v1 reversed%}
<tr hid="{{ row.nid }}" bid="{{ row.b_id }}">
<td>{{ forloop.revcounter }}</td>
<td>{{ row.hostname }}</td>
</tr>
{% empty %}
<td>---</td>
{% endfor %}
二、提交信息
1.url提交时:
<!--写法1-->:
<a class="menu" href="/shop/user_info">用户管理</a>
<!--写法2-->:
<form action="{% url 'shop:index' nid=1 pid=92 %}" method="post">
<!--写法3-->:
<a target="_blank" href="/detail-{{ foo }}-{{ foo }}.html">{{ v.name }}</a>
<!--写法4-->:
<form method="post" action="/shop/useredit-{{ obj.id }}/">
<!--写法5-->:
<form action="{{ request.path_info }}" method="post">
2.ajax请求:
提交数据到后台,并根据后台的响应情况显示信息
$('#ajax_submit_edit').click(function () {
$.ajax({
url:"/consumer/ajax_submit_edit",
type:"POST",
data:$("#edit_form").serialize(),
{#data:{form1:$("#edit_form").serialize(),form2:$("#edit_form").serialize(),#}
dataType:"JSON",
traditional:true,
success:function(data){
if (data.status){
$('.edit-modal,.shade').addClass('hide');
location.reload();
}else{
$('#error').text(data.error)
}
},
error:function () {
}
})
});
三、模板的继承
1.内置方法:
1.1.基础知识:
extends:子模板中导入,调用母模板的HTML文件,用法示例:{%extends common.html%}
include:子板中导入,调用一个HTML文件,通常用于生成重复的块标签,用法示例:{%include clone.html%}
block:父模板子模板中均需要使用,父模板用于占位,子模板用于替换相应信息,用法示例:{% block name %}{% endblock%}
1.2.用法示例:
父模板:
<!--父模板-->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>{% block title%}{% endblock %}</title>
<link rel="shortcut icon" href="/static/images/favicon.ico"/>
<link rel="stylesheet" href="/static/master.css">
{% block css %}{% endblock %}
</head>
<body>
<div class="pg-header">
<div class="menu">
<a class="pg-menu" href="/consumer/manage">首页</a>
<a class="pg-menu" href="/consumer/application">应用管理</a>
<a class="pg-menu" href="/consumer/bu">业务管理</a>
</div>
</div>
{% block content %}{% endblock %}
{% block js %}{% endblock %}
</body>
</html>
子模板:
<!--子模板-->
{% extends "common.html" %}
{% block title %}
业务线管理
{% endblock %}
{% block css %}
<link rel="stylesheet" href="/static/v_common.css"/>
{% endblock %}
{% block content %}
<div class="table">
<table >
<thead >
<tr align="center">
<th>业务名称</th>
<th>职位代号</th>
<th>操作名称</th>
</tr>
</thead>
<tbody>
{% for b in bu %}
<tr nid="{{ b.id }}" align="center">
<td>{{ b.caption }}</td>
<td>{{ b.code }}</td>
<td>
<a>编辑</a>
<a>删除</a>
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
<div class="button">
{% for i in u %}
<div>
{% include 'clone.html' %}
</div>
{% endfor %}
</div>
{% endblock %}
2.自定义函数(simple_tag)
2.1.基础知识
帮助方法:
{{ item.event_start|date:"Y-m-d H:i:s"}}: 将datetime类型转换为相应格式
{{ bio|truncatewords:"30" }}: 取前30个字符,其余舍弃
{{ my_list|first|upper }}: 拿到的字符串,第一个字母大写
{{ name|lower }}: 将拿到的字符串小写
将python内置的函数,拿到模板中使用。
simple_tag的优缺点:
优点:参数可以是任意多个
缺点:不能作为if条件
filter的优缺点:
优点:可以作为if条件
缺点:最多两个参数,不能加空格
2.2 下面介绍一下自定义函数simple_tag的方法:
2.2.1 在某个app下面创建一个命名为templatetags的包(名字不可更改)
2.2.2 在templatetags下创建任意多个py文件,举例:test.py
2.2.3 在某个py文件下,创建register对象和自定义的函数:
from django import template
from django.utils.safestring import mark_safe
#此对象名称不可更改
register=template.Library()
@register.simple_tag
def my_sum(t1,t2,t3):
return t1+t2+t3
@register.simple_tag
def my_input(id,arg):
result="<input type='text' id='%s' class='%s'>"%(id,arg,)
return mark_safe(result)
2.2.4 settings文件中注册该app
2.2.5 在需要调用的HTML文件中调用
{% load test%}
<span>{% my_time 2 5 9 %} </span>
<span>{% my_input 'id' 'hide' %}</span>
2.2.6 重新启动服务器
2.3 filter的自定义函数方法:
2.3.1 在某个app下面创建一个命名为templatetags的包(名字不可更改)
2.3.2 在templatetags下创建任意多个py文件,举例:test.py
2.3.3 在某个py文件下,创建register对象和自定义的函数:
from django import template
from django.utils.safestring import mark_safe
register=template.Library()
@register.filter
def my_filter(a1,a2):
return a1+a2
2.3.4 settings文件中注册该app
2.3.5 在需要调用的HTML文件中调用
调用方法:{{ 参数1|函数名:"参数2,参数3" }}
{{ 参数1|函数名:数字 }}
{% load test %}
<p>{{ "你是"|my_filter:"谁?" }}</p>
2.3.6 重新启动服务器