传入变量

{{ 变量名 }}

在 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. tarjan图论算法

    tarjan图论算法 标签: tarjan 图论 模板 洛谷P3387 [模板]缩点 算法:Tarjan有向图强连通分量+缩点+DAGdp 代码: #include <cstdio> #i ...

  2. Python连载50-贪婪匹配、XPath介绍

    一.贪婪和非贪婪 1.贪婪:尽可能多的匹配,(*)表示贪婪匹配 2.非贪婪:找到符合条件的最小内容即可,(?)表示非贪婪 3.正则默认使用贪婪匹配 import re title = u"& ...

  3. PHP中生成随机字符串,数字+大小写字母随机组合

    简单的生成随机字符串: /* * 生成随机字符串 * * $length 字符串长度 */ function random_str($length) { // 密码字符集,可任意添加你需要的字符 $c ...

  4. LeetCode 350: 两个数组的交集 II Intersection of Two Arrays II

    题目: 给定两个数组,编写一个函数来计算它们的交集. Given two arrays, write a function to compute their intersection. 示例 1: 输 ...

  5. git分支合并创建切换

    1. 场景描述 介绍下Git最新内容合并到主干.从主干创建最新分支.idea下切换最新分支,能在2分钟内完成git合并.分支创建以及在idea中完成切换,希望能帮到一些朋友. 2. 解决方案 从以下三 ...

  6. Oracle - v$lock查询慢原因分析

    数据库内部对象X$统计信息过旧,导致v$lock查询慢 前段时间用python写了个zabbix监控脚本,里面有一个检查锁的sql语句,sql语句是这样子的select count(*) retval ...

  7. 码云git常用命令

    Git常用操作命令: 1) 远程仓库相关命令 检出仓库:$ git clone git://github.com/jquery/jquery.git 查看远程仓库:$ git remote -v 添加 ...

  8. 获取json对象的键数组和值数组

    const obj = {a: 1, b: 2, c: 3}; Object.values(obj);//[1, 2, 3] Object.keys(obj);//["a", &q ...

  9. Java日期时间API系列3-----Jdk7及以前的日期时间类的不方便使用问题

    使用Java日期时间类,每个人都很熟悉每个项目中必不可少的工具类就是dateutil,包含各种日期计算,格式化等处理,而且常常会遇到找不到可用的处理方法,需要自己新增方法,处理过程很复杂. 1.Dat ...

  10. HTML学习 day03

    表单 表单   表单:表单域:包含了处理表单数据所用的程序的URL以及数据提交到服务器的方法.     表单控件:(对象.元素):包含了文本框.密码框.隐藏.多行文本框(文本域).复选框.单选框.下拉 ...