Django 模版语言
传入变量
{{ 变量名 }}
在 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 模版语言的更多相关文章
- Django模版语言 格式化显示 后台datatime()时间
Django模版语言 格式化显示 后台datatime()时间 场景描述:
- Django模版语言的复用 1. include标签--模版导入 2.inclusion_tag自定义标签--模版导入 3.母版
include标签--模版导入 ''' 前提:项目中,往往会出现多个页面拥有一个或几个相同的页面版块,或是一个页面多个页面版块是相同的 如何运用:可以将多个样式标签的集合进行封装,对外提供版块的名字( ...
- Django 模版语言详解
一.简介 模版是纯文本文件.它可以产生任何基于文本的的格式(HTML,XML,CSV等等). 模版包括在使用时会被值替换掉的 变量,和控制模版逻辑的 标签. 例: {% extends "b ...
- django -- 模版语言之过滤器Filters和for循环
前戏 在前面写的图书管理系统中,我们对模版语言应该已经不陌生了,使用{{ }}包裹起来的就是模版语言,只需要记住两种就可以了 {{ 变量名 }} 变量相关的 {% %} ...
- Django模版语言自定义标签-实现前端 关联组合过滤查询
前端关联 组合过滤查询 实现效果如图: models.py 创建表代码 from django.db import models # Create your models here. class Le ...
- Django模版语言inclusion_tag的用法。
inclusion_tag.它多用于一个HTML片段的.例如我写的一个BBS项目中. 一个博主的主页面的左侧栏和查看博主某篇文章的页面的左栅栏的一样的.为了不用重复写同样的代码.且提高页面的扩 ...
- Django - 模版语言循环字典
1.可以对传入字典参数做循环显示 views.py中代码: urls.py中代码: html中代码: 在模版语言中,可以对字典进行类似python中的操作(keys,values,items),需要注 ...
- 第三章:模版层 - 1:Django模板语言详解
本节将介绍Django模版系统的语法.Django模版语言致力于在性能和简单性上取得平衡. 如果你有过其它编程背景,或者使用过一些在HTML中直接混入程序代码的语言,那么你需要记住,Django的模版 ...
- Django模板语言详解
本节将介绍Django模版系统的语法.Django模版语言致力于在性能和简单性上取得平衡. 如果你有过其它编程背景,或者使用过一些在HTML中直接混入程序代码的语言,那么你需要记住,Django的模版 ...
随机推荐
- LeetCode 1243 数组变换
地址 https://leetcode-cn.com/contest/biweekly-contest-12/problems/array-transformation/ 首先,给你一个初始数组 ar ...
- 房屋布局分析《Physics Inspired Optimization on Semantic Transfer Features: An Alternative Method for Room Layout Estimation》
视觉算法在智能审核系统上的演进与实践 刘天悦 贝壳找房 / 资深工程师 https://static001.geekbang.org/con/56/pdf/1088777747/file/%E8%A7 ...
- Goldbach`s Conjecture(LightOJ - 1259)【简单数论】【筛法】
Goldbach`s Conjecture(LightOJ - 1259)[简单数论][筛法] 标签: 入门讲座题解 数论 题目描述 Goldbach's conjecture is one of t ...
- 2019 SDN上机第7次作业
2019 SDN上机第7 次作业 basic补充`/* -- P4_16 -- */ include <core.p4> include <v1model.p4> const ...
- Codeforces Round #598 (Div. 3) C. Platforms Jumping 贪心或dp
C. Platforms Jumping There is a river of width n. The left bank of the river is cell 0 and the right ...
- __format__
目录 一.__format__ 一.__format__ 自定制格式化字符串 date_dic = { 'ymd': '{0.year}:{0.month}:{0.day}', 'dmy': '{0. ...
- ASP.NET Core 获取主机名时的 "Decoded string is not a valid IDN name" 错误
在 ASP.NET Core 中通过 Request.Host.Host 获取主机名(hostname)时,如果主机名中包含非 ASCII 字符(比如 puny code),就会引发下面的异常: Sy ...
- umi+dva+antd新建项目(亲测可用)
首先全局安装dva+umiumi:npm install -g umidva:npm install -g dva-cli 通过脚手架创建项目 一: mkdir myapp && cd ...
- IT兄弟连 Java语法教程 数组 使用foreach循环遍历数组元素
从JDK5之后,Java提供了一种更简单的循环:foreach循环,也叫作增强for循环,这种循环遍历数组和集合更加简洁.使用foreach循环遍历数组和集合元素时,无需获得数组或集合的长度,无需根据 ...
- H5混合应用之X5内核
一.X5内核介绍 X5内核是腾讯公司基于优秀开源 webkit 深度优化的浏览器渲染引擎,并且在2014年正式宣布开放给app开发者,所以现在可以在很多app上看到都是使用的X5内核实现Hybrid混 ...