一、变量和句点符深度查找

  • 字符串变量引用
def show_time(request):
    now_time = datetime.datetime.now()
    return render(request,'current_datatime.html',{'now_time':now_time})
<h1>It is now {{ now_time }}</h1>
  • 列表变量引用
def query(request):
    name_list = ['Abbie','Cathy','Emma']
    return render(request, "query.html", {'name_list': name_list})
<h1>Hello {{ name_list.0 }}</h1>
<h1>Hello {{ name_list.1 }}</h1>
<h1>Hello {{ name_list.2 }}</h1>
  • 字典变量引用
def query(request):
    info = {'name':'Abbie','age':'18','gender':''}
    return render(request, "query.html", {'info': info})
<h1>Name: {{ info.name }}, Age: {{ info.age }}</h1>
  • 类对象的引用
class Cat():
    def __init__(self,name):
        self.name = name
def query(request):
    c1 = Cat("大橘")
    return render(request, "query.html", {'c': c1})
<h1>请主公以{{ c.name }}为重</h1>

二、过滤器(filter)

<h1>sum: {{ a|add:b }}</h1>  #加

<h1>{{ str|capfirst }}</h1>  #首字母大写

<h1>{{ str|cut:"llo" }}</h1> #将llo切除

<h1>{{ now_time|date:'Y-m-d H:i:s' }}</h1>  #自定义时间格式

<h1>{{ empty_list|default:"Is Null" }}</h1> #如果为False,则显示默认值

<h1>{{ empty_list|default_if_none:"Is None." }}</h1>  #如果为none,则显示默认值

<h1>{{ a_tag|safe }}</h1>  #将变量中的html加以渲染

三、标签(tag)

  • autoescape:将变量中的HTML渲染
{% autoescape off %}
    <h1>{{ a_tag }}</h1>
{% endautoescape %}
  • if:判断标签
{% if info.age > 18 %}
    <h1>{{ info.name }}大于等于18</h1>
{% elif info.age < 18 %}
    <h1>{{ info.name }}小于18</h1>
{% else %}
    <h1>{{ info.name }}等于18</h1>
{% endif %}
  • for:循环标签
{% for name in empty_list %}
    <h1>{{ forloop.counter }}.Hello {{ name }}</h1>
    {% empty %}  #如果是空列表则显示以下HTML
        <h1>没有找到哦</h1>
{% endfor %}
forloop.counter
forloop.counter0
forloop.revcounter
forloop.revcounter0
forloop.first  当第一次循环时值为True
  • csrf_token:身份认证
<form action="{% url 'login' %}" method="post">
    <p>姓名 <input type="text" name="user"></p>
    <p>密码 <input type="password" name="pwd"></p>
    <p><input type="submit"></p>
    {% csrf_token %}
</form>
  • with:替换变量名
  • verbatim:禁止render渲染
  • load:加载标签库

四、自定义filter和tag

  1. 在app目录下创建templatetags包
  2. 在templatetags包中创建mytags
from django import template
from django.utils.safestring import mark_safe
register = template.Library()
@register.filter()  #只可以传一个参数
def filter_multi(x,y):
    return x*y

@register.simple_tag()  #simple_tag不限制参数个数,而且不能在控制语句中使用
def simple_tag_multi(x,y,z):
    return x*y*z
  1. 引用方法
{% load mytags %}
<h1>{{ a|filter_multi:b }}</h1>

<h1>{% simple_tag_multi a b %}</h1>

五、继承标签

  • 父模板
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }
        .nav {
            line-height: 40px;
            width: 100%;
            background: #1f57a5;
            color: white;
            font-size: 20px;
            text-align: center;
        }
        .left {
                width: 20%;
                min-height: 600px;
                overflow: auto;
                background-color: #e1e1e1;
        }
        .manager {
            text-align: center;
            padding: 20px 0;
            margin: 20px 0;
            font-size: 18px;
        }
        .context {
            width: 70%;
            min-height: 600px;
        }
        .left,.context {
            float: left;
        }
        .welcomeinfo {
            text-align: center;
        }
    </style>
</head>
<body>

<div class="outer">
    <div class="nav">智掌管理系统</div>
    <div class="left">
        <div class="home manager"><a href="/backend/">首页</a></div>
        <div class="teacher manager"><a href="">教师管理</a></div>
        <div class="student manager" ><a href="/student/">学生管理</a></div>
    </div>
    <div class="context">
        {% block context %}  #在此定义一个盒子
            <h1 class="welcomeinfo">您好,欢迎使用智掌管理系统</h1>
        {% endblock %}
    </div>
</div>

</body>
</html>
  • block模板引用
{% extends "index.html" %}

{% block context %}
    {{ block.super }}
    <h1 class="welcomeinfo">您好,欢迎使用学生管理系统</h1>
    {% for i in stu_list %}
        <h2>{{ i }}</h2>
    {% endfor %}
{% endblock %}
  • include引用
{% extends "index.html" %}
{% load staticfiles %}

{% block context %}
    {{ block.super }}
    <h1 class="welcomeinfo">您好,欢迎使用学生管理系统</h1>
    {% for i in stu_list %}
        <h2>{{ i }}</h2>
    {% endfor %}
    {% include "ad.html" %}
{% endblock %}

191022Django模板的更多相关文章

  1. Jade模板引擎让你飞

    写在前面:现在jade改名成pug了 一.安装 npm install jade 二.基本使用 1.简单使用 p hello jade! 渲染后: <p>hello jade!</p ...

  2. ABP入门系列(2)——通过模板创建MAP版本项目

    一.从官网创建模板项目 进入官网下载模板项目 依次按下图选择: 输入验证码开始下载 下载提示: 二.启动项目 使用VS2015打开项目,还原Nuget包: 设置以Web结尾的项目,设置为启动项目: 打 ...

  3. CMS模板应用调研问卷

    截止目前,已经有数十家网站与我们合作,进行了MIP化改造,在搜索结果页也能看到"闪电标"的出现.除了改造方面的问题,MIP项目组被问到最多的就是:我用了wordpress,我用了织 ...

  4. PHP-自定义模板-学习笔记

    1.  开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2.  整体架构图 ...

  5. 【原创分享·微信支付】C# MVC 微信支付之微信模板消息推送

    微信支付之微信模板消息推送                    今天我要跟大家分享的是“模板消息”的推送,这玩意呢,你说用途嘛,那还是真真的牛逼呐.原因在哪?就是因为它是依赖微信生存的呀,所以他能不 ...

  6. OpenCV模板匹配算法详解

    1 理论介绍 模板匹配是在一幅图像中寻找一个特定目标的方法之一,这种方法的原理非常简单,遍历图像中的每一个可能的位置,比较各处与模板是否“相似”,当相似度足够高时,就认为找到了我们的目标.OpenCV ...

  7. 前端MVC学习总结(一)——MVC概要与angular概要、模板与数据绑定

    一.前端MVC概要 1.1.库与框架的区别 框架是一个软件的半成品,在全局范围内给了大的约束.库是工具,在单点上给我们提供功能.框架是依赖库的.AngularJS是框架而jQuery则是库. 1.2. ...

  8. ThinkPHP+Smarty模板中截取包含中英文混合的字符串乱码的解决方案

    好几天没写博客了,其实有好多需要总结的,因为最近一直在忙着做项目,但是困惑了几天的Smarty模板中截取包含中英文混合的字符串乱码的问题,终于解决了,所以记录下来,需要的朋友看一下: 出现乱码的原因: ...

  9. ThinkPHP 模板substr的截取字符串函数

    ThinkPHP 模板substr的截取字符串函数在Common/function.php加上以下代码 /** ** 截取中文字符串 **/ function msubstr($str, $start ...

随机推荐

  1. Web前端开发中的小错误

    Web前端开发中的小错误 错误1:表单的label标签跟表单字段没有关联 利用“for”属性允许用户单击label也可以选中表单中的内容.这可以扩大复选框和单选框的点击区域,非常实用. 错误2:log ...

  2. [转载]java匿名对象

    来源:https://blog.csdn.net/qiaoquan3/article/details/53300248 匿名对象:没有名字的对象:new Car();  //匿名对象其实就是定义对象的 ...

  3. CF407D Largest Submatrix 3

    cf luogu 被自己菜到自闭了/kk 既然是子矩阵,那么惯用套路为枚举矩阵上下边界,然后\(O(n)\)扫描求解.这题里要从左往右枚举右端点,然后看左端点最多能放到哪,那就对于每个数求出在上下边界 ...

  4. Slimvoice快速而小巧

    这可行吗?绝对没问题.完全加载的最大页面只有230 KB.因为所有内容都被缓存和压缩,所以随后查看的每个页面只有大约6 KB,这比我见过的具有相同功能的SPA要小得多. Slimvoice快速而小巧, ...

  5. Java高并发程序设计学习笔记(二):多线程基础

    转自:https://blog.csdn.net/dataiyangu/article/details/86226835# 什么是线程?线程的基本操作线程的基本操作新建线程调用run的一种方式调用ru ...

  6. golang常见的几种并发模型框架

    原文链接 package main import ( "fmt" "math/rand" "os" "runtime" ...

  7. CssSyntaxError (2:1) Unknown word 1 | > 2 | var content = require("!!./index.css");

    项目引入css文件后报错 Module build failed (from ./node_modules/_css-loader@2.1.1@css-loader/dist/cjs.js):CssS ...

  8. Windows下安装Oracle 11g 2版 64位,从下载,安装,测试连接成功~!

    首先进入oracle官网下载文件 点击进入 也可以选择结合PanDownload网页版使用百度链接下载 链接: https://pan.baidu.com/s/1UHJiaMXUrSG2IX793ng ...

  9. VirtualBox给CentOS虚拟机挂载磁盘扩大空间

    VirtualBox给CentOS虚拟机挂载磁盘扩大空间 楼主,发现虚拟机使用存储空间不够用的情况,需要改虚拟机挂载磁盘,扩容,在网上找了一波资料,于是整合记录操详细作如下: 概要步骤如下: 1.设置 ...

  10. linux下创建软链--laravel软链

    ln -s /www/wwwroot/project_name/storage/app/public/ /www/wwwroot/project_name/public/storage