传入变量

{{ 变量名 }}

在 view.py 的函数返回 render 时在html文件名后传入一个字典,字典的 key 对应html文件中的变量名,value 为传入的值

views.py:

def func(request):
return render(request, "index.html", {'current_user': "bob"})

index.html:

<body>
<div>{{current_user}}</div>
</body>

最后生成的字符串

<body>
<div>bob</div>
</body>

循环

For循环

views.py:

def func(request):
return render(request, "index.html", {'current_user': "bob", 'user_list': ['bob','jack']})

index.html:

<body>
<div>{{current_user}}</div>
<ul>
{% for row in user_list %}
{% if row == "bob" %}
<li>{{ row }}</li>
{% endif %}
{% endfor %}
</ul>
</body>
字典循环

views.py:

USER_DICT = {
'1': {'name': 'user1', 'age': '12', 'gender': 'M'},
'2': {'name': 'user2', 'age': '12', 'gender': 'M'},
'3': {'name': 'user3', 'age': '12', 'gender': 'M'},
'4': {'name': 'user4', 'age': '12', 'gender': 'M'},
}
def show_dict(request):
return render(request, 'dict.html', {'user_dict': USER_DICT})

index.html:

  • .keys: 只显示 key(默认状态)
<body>
<ul>
{% for i in user_dict.keys %}
<li>{{ i }}</li>
{% endfor %}
</ul>
</body>

输出:

<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
  • .values: 只显示 value
<body>
<ul>
{% for i in user_dict.values %}
<li>{{ i }}</li>
{% endfor %}
</ul>
</body>

输出:

<li>{'name': 'user1', 'age': '12', 'gender': 'M'}</li>
<li>{'name': 'user2', 'age': '12', 'gender': 'M'}</li>
<li>{'name': 'user3', 'age': '12', 'gender': 'M'}</li>
<li>{'name': 'user4', 'age': '12', 'gender': 'M'}</li>
  • .items: 同时显示 key 和 value
<body>
<ul>
{% for i in user_dict.items %}
<li>{{ i }}</li>
{% endfor %}
</ul>
</body>

输出:

<li>('1', {'name': 'user1', 'age': '12', 'gender': 'M'})</li>
<li>('2', {'name': 'user2', 'age': '12', 'gender': 'M'})</li>
<li>('3', {'name': 'user3', 'age': '12', 'gender': 'M'})</li>
<li>('4', {'name': 'user4', 'age': '12', 'gender': 'M'})</li>

<body>
<ul>
{% for k, v in user_dict.items %}
<li>{{ k }}:{{ v }}</li>
{% endfor %}
</ul>
</body>

输出:

<li>1:{'name': 'user1', 'age': '12', 'gender': 'M'}</li>
<li>2:{'name': 'user2', 'age': '12', 'gender': 'M'}</li>
<li>3:{'name': 'user3', 'age': '12', 'gender': 'M'}</li>
<li>4:{'name': 'user4', 'age': '12', 'gender': 'M'}</li>

示例:

通过 a 标签提交 get 请求

<ul>
{#/detail/?nid= 方式#}
{% for k, v in user_dict.items %}
<li><a target="_blank" href="/detail/?nid={{ k }}">{{ v.name }}</a></li>
{% endfor %}
</ul>
<li><a target="_blank" href="/detail/?nid=1">user1</a></li>
<li><a target="_blank" href="/detail/?nid=2">user2</a></li>
<li><a target="_blank" href="/detail/?nid=3">user3</a></li>
<li><a target="_blank" href="/detail/?nid=4">user4</a></li>
循环计数
{% for i in list %}
{{ forloop.counter }} # 正序从1开始计数
{{ forloop.counter0 }} # 正序从0开始计数
{{ forloop.revcounter }} # 倒序从1开始计数
{{ forloop.revcounter0 }} # 倒序从0开始计数
{{ forloop.parentloop }} # 父循环计数,返回字典,包含forloop的所有七项(用于两层循环)
{{ forloop.first }} # 是否为第一个
{{ forloop.last }} # 是否为最后一个
{% endfor %}

索引

模版语言中不使用'[]'进行索引,而是直接'.'

views.py:

def func(request):
return render(request, "index.html", {
'current_user': "bob",
'user_list': ['bob','jack'],
'user_dict': {'k1': 'v1', 'k2': 'v2'}})

index.html:

	<body>
<div>{{current_user}}</div>
<a> {{ user_list.1 }} </a>
<a> {{ user_dict.k1 }} </a>
<a> {{ user_dict.k2 }} </a>
</body>

判断

条件

views.py:

def func(request):
return render(request, "index.html", {
'current_user': "bob",
"age": 18,

index.html:

	<body>
<div>{{current_user}}</div>
{% if age %}
<a>有年龄</a>
{% if age >= 18 %}
<a>成年</a>
{% else %}
<a>未成年</a>
{% endif %}
{% else %}
<a>无年龄</a>
{% endif %}
</body>

母版

{% block %}

母版通过{% block name %}{% endblock %}确定子板插入位置

母版 html 文件

master.html:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>master</title>
<link rel="stylesheet" href="/static/common.css">
{% block css %}{% endblock %}
{# 插入CSS文件位置 #}
</head>
<body> <div id="header">This is header</div> <div>
<div id="left_menu">
<a href="/block-1.html">
<p>page1</p>
</a>
<a href="/block-2.html">
<p>page2</p>
</a>
<a href="/block-3.html">
<p>page3</p>
</a>
</div>
<div id="content">
{% block content %}{% endblock %}
</div> </div> <div id="footer">This is footer</div> </body>
<script src="/static/jQuery3.4.1.js"></script>
{% block js %}{% endblock %}
{# 插入JS文件位置 #}
</html>

子板 html 文件

{% extends 'master.html' %}
{# 确定要应用的母版 #} {% block css %}{% endblock %}
{# 插入CSS文件 #} {% block content %}
<div>
<h1>This is page1.</h1>
{% include 'tag.html' %}
{% include 'tag.html' %}
{# 下面介绍{% include 'tag.html' %} #}
</div>
{% endblock %}
{# 插入内容 #} {% block js %}{% endblock %}
{# 插入JS文件 #}
{% include %}

一个子板只能继承一个母版,但是可以插入多个 include

tag.html:

<a>一个小插件</a>

{% include 'tag.html' %}会将整个html文件插入到指定位置

自定义函数

simple_tag

缺点:

不能作为if条件

优点:

可以传入任意数量参数,参数之间用空格隔开

步骤:

1.app下创建templatetags目录

2.目录下创建func.py文件

3.导入模块,创建对象

from django import template

register = template.Library()

4.写函数

@register.simple_tag
def func_s(a1, a2):
return a1 + a2

5.settings中注册APP

6..html文件顶部加载函数所在.py文件

{% load func %}

7.使用函数

{% func_s 2 4 %}

filter

缺点:

最多传入两个参数,不能加空格(可以将多个参数打包成一个参数传入,在函数中在解析)

优点:

能作为if条件

步骤:

1.app下创建templatetags目录

2.目录下创建.py文件

3.导入模块,创建对象

from django import template

register = template.Library()

4.写函数

@register.filter()
def func_f(a1, a2):
return a1 + a2

5.settings中注册APP

6..html文件顶部加载函数函数所在.py文件

{% load func %}

7.使用函数

{{ 2|func_f:4 }}

Django 模版语言的更多相关文章

  1. Django模版语言 格式化显示 后台datatime()时间

    Django模版语言 格式化显示 后台datatime()时间 场景描述:

  2. Django模版语言的复用 1. include标签--模版导入 2.inclusion_tag自定义标签--模版导入 3.母版

    include标签--模版导入 ''' 前提:项目中,往往会出现多个页面拥有一个或几个相同的页面版块,或是一个页面多个页面版块是相同的 如何运用:可以将多个样式标签的集合进行封装,对外提供版块的名字( ...

  3. Django 模版语言详解

    一.简介 模版是纯文本文件.它可以产生任何基于文本的的格式(HTML,XML,CSV等等). 模版包括在使用时会被值替换掉的 变量,和控制模版逻辑的 标签. 例: {% extends "b ...

  4. django -- 模版语言之过滤器Filters和for循环

    前戏 在前面写的图书管理系统中,我们对模版语言应该已经不陌生了,使用{{ }}包裹起来的就是模版语言,只需要记住两种就可以了 {{ 变量名 }}            变量相关的 {% %}      ...

  5. Django模版语言自定义标签-实现前端 关联组合过滤查询

    前端关联 组合过滤查询 实现效果如图: models.py 创建表代码 from django.db import models # Create your models here. class Le ...

  6. Django模版语言inclusion_tag的用法。

        inclusion_tag.它多用于一个HTML片段的.例如我写的一个BBS项目中. 一个博主的主页面的左侧栏和查看博主某篇文章的页面的左栅栏的一样的.为了不用重复写同样的代码.且提高页面的扩 ...

  7. Django - 模版语言循环字典

    1.可以对传入字典参数做循环显示 views.py中代码: urls.py中代码: html中代码: 在模版语言中,可以对字典进行类似python中的操作(keys,values,items),需要注 ...

  8. 第三章:模版层 - 1:Django模板语言详解

    本节将介绍Django模版系统的语法.Django模版语言致力于在性能和简单性上取得平衡. 如果你有过其它编程背景,或者使用过一些在HTML中直接混入程序代码的语言,那么你需要记住,Django的模版 ...

  9. Django模板语言详解

    本节将介绍Django模版系统的语法.Django模版语言致力于在性能和简单性上取得平衡. 如果你有过其它编程背景,或者使用过一些在HTML中直接混入程序代码的语言,那么你需要记住,Django的模版 ...

随机推荐

  1. 重装windows后如何恢复mysql服务

    如果重装系统后之前的mysql还在的话,可又直接恢复,不需要安装: 注意my.ini文件的位置,应该与bin目录同级: 进入cmd,然后进入你的mysql的bin目录,输入命令:mysqld inst ...

  2. npm install 提示 `gyp: No Xcode or CLT version detected!` MacOS 10.15

    https://github.com/nodejs/node-gyp/issues/569 https://github.com/nodejs/node-gyp/issues/1927 解决链接:ht ...

  3. spring-framework-core-ioc Container

    阅读须知 实例化bean xml方式实例化bean 注解方式实例化bean java方式实例化bean ClassPathXmlApplication和AnnotationConfigApplicat ...

  4. SpringMVC日期类型接收空值异常问题

    最近遇到SpringMVC写个controller类,传一个空串的字符类型过来,正常情况是会自动转成date类型的,因为数据表对应类类型就是date的 解决方法是在controller类的后面加个注解 ...

  5. tomcat项目下载中文文件乱码问题

    最近遇到在tomcat运行的项目下载文件时候都出现了乱码,然后经过排查是只有中文命名的文件才有问题,所以就推测有可能和tomcat的编码有关系 tomcat默认的编码:iso8859-1,所以中文的文 ...

  6. pandas.read_sql_query()读取数据库数据用chunksize的坑

    最近一项工作需要读取数据库中1500万条数据,考虑到数据量太大,不方便直接一次性读取,不然会内存爆炸.想到用pandas.read_sql_query()里有一个chunksize可以分批返回chun ...

  7. 2018-8-10-win10-uwp-进度条-Marquez-

    原文:2018-8-10-win10-uwp-进度条-Marquez- title author date CreateTime categories win10 uwp 进度条 Marquez li ...

  8. Java生鲜电商平台-电商支付流程架构实战

    Java生鲜电商平台-电商支付流程架构实战 说明:我一直秉承的就是接地气的业务架构实战.我的文章都有一个这样的核心. 1. 业务场景 2. 解决问题. 3.代码实现. 4.代码重构. 5.总结与复盘. ...

  9. java基础第十七篇之网络编程和装饰者模式

    1:网络概述 1.1 网络的发展Net 1964年,美国人---> 阿帕网--->以太网Internet 1.2 网络的通信协议 windows电脑,android手机,Mac平板---& ...

  10. JavaScript几种继承方式

    我们先构建一个Person的构造函数 function Person(name) { this.name=name; } Person.prototype.sayHi=function () { co ...