django静态文件中常用的模板语言、自定义函数及模板的继承6

一、循环语句

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 重新启动服务器

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

theskylife

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值