文章目录

  • 前言
  • 新建一条路由
  • python不同数据类型填充模板
    • 视图向模板中传递数据
    • 字符串填充模板
    • 列表填充模板
    • 字典填充模板
    • 嵌套数据类型填充模板
  • 模板中的判断语句
  • 模板中的循环语句
  • 综合案例

前言

通过本节可以学到:

  1. 向模板中传递数据
  2. 不同python数据类型填充模板
  3. 模板中使用判断语句
  4. 模板中使用循环语句

新建一条路由

我们先添加一条路由:

# url.py
from django.urls import path
from app01 import viewsurlpatterns = [path("tpl", views.tpl),
]
from django.shortcuts import render, HttpResponsedef tpl(request):return render(request, 'tpl.html')
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>模板语法</title>
</head>
<body>
<h1>模板语法学习</h1>
</body>
</html>

看到下面的页面,说明我们的路由创建好了。

python不同数据类型填充模板

视图向模板中传递数据

上节我们讲到了render函数,讲到了render函数的前两个参数request和template_name,它还由第三参数context,默认为None。我们可以通过context将数据传递给模板。以字符串、列表、字典、嵌套数据类型进行讲解。

视图函数渲染模板流程:

字符串填充模板

def tpl(request):name = '张三'return render(request, 'tpl.html', {'n1': name})

为模板传递 {‘n1’: name},其中n1是在模板中将要调用的变量名。
那么,模板中怎么使用n1呢?

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>模板语法</title>
</head>
<body>
<h1>模板语法学习</h1>
<p>{{ n1 }}</p>
</body>
</html>

在模板中只需要使用双大括号*{{ 变量名 }}*即可调用视图函数中的name的值(张三)。

示例中n1是一个字符串,n1是一个整数或浮点数能不能传递?大家可以自行测试下。

列表填充模板

上面演示了视图向模板传递字符串,那么能不能传递列表呢?
Of course!当然可以了!

def tpl(request):roles = ['管理员', 'CEO', 'CFO']return render(request, 'tpl.html', {'roles': roles})
<!DOCTYPE html>
<html lang="en">
<head>
...
</head>
<body>
<h1>模板语法学习</h1>
<p>{{ roles }}</p>
</body>
</html>


列表以字符串的形式展示在了页面上。这显然不符合我们的需求。那如何来获取其中的某个元素呢?
就向列表取值一样,可以使用索引。不同的是模板中是使用 {{ list.index }} 获取值。

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>模板语法</title>
</head>
<body>
<h1>模板语法学习</h1>
<p>{{ roles.1 }}</p>
</body>
</html>

这样就能把列表中索引为1的值显示在页面上。

同样的,大家可以试试索引为0、索引为2,前端展示的内容。

字典填充模板

def tpl(request):user_info = {"name": '李四', 'salary': 10000, 'role': "CTO"}return render(request, 'tpl.html', {'user_info': user_info})

模板中如果使用字典,通过key获取value值,格式:{{ dict.key }}

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>模板语法</title>
</head>
<body>
<h1>模板语法学习</h1>
<p><span>姓名:</span>{{ user_info.name }}</p>
<p><span>角色:</span>{{ user_info.role }}</p>
<p><span>薪资:</span>{{ user_info.salary }}</p>
</body>
</html>

嵌套数据类型填充模板

如果遇到像 [{‘name’: ‘张三’, ‘age’: 19}, {‘name’: ‘李四’, ‘age’: 30},{‘name’: ‘王五’, ‘age’: 27}]这种嵌套的数据怎么处理呢?其实方法和python中获取是一样的,不同的是模板语法中使用的是,python中用的是中括号。

def tpl(request):data_list = [{'name': '张三', 'age': 19},{'name': '李四', 'age': 30},{'name': '王五', 'age': 27},]return render(request, 'tpl.html', {'data_list': data_list})

html中获取李四年龄为例。

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>模板语法</title>
</head>
<body>
<h1>模板语法学习</h1>
<p>{{ data_list.1.age }}</p>
</body>
</html>

data_list.1获取李四所在的字典,data_list.1.age李四所在字典的年龄key。

模板中的判断语句

模板中同样可以使用判断语句,其格式如下

{% if 条件 %}
语句
{% elif 条件 %}
语句
{% else %}
语句
{% endif %}

elif和else语句可以无。
示例:

def tpl(request):name = '张三'return render(request, 'tpl.html', {'n1': name})
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>模板语法</title>
</head>
<body>
{% if n1 == '张三' %}
<p>这个人是张三</p>
{% else %}
<p>这个人不是张三</p>
{% endif %}
</body>
</html>

模板中的循环语句

模板中同样可以可以使用循环语句,其格式如下:

{% for item in iter %}
循环体
{% endfor %}

示例,对字典进行循环:

def tpl(request):user_info = {"name": '李四', 'salary': 10000, 'role': "CTO"}return render(request, 'tpl.html', {'user_info': user_info})
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>模板语法</title>
</head>
<body>
<h1>模板语法学习</h1>
{% for item in user_info.items %}<div>{{ item}}</div>
{% endfor %}
</body>
</html>


示例中循环了字典的items,同样也可以循环keys和values,注意不用加括号

最后总结以下:
所谓模板语法,其本质上是在html中写一些占位符,由数据对这些占位符进行替换和处理。

综合案例

通过requests将腾讯抓取腾讯新闻标题、链接等信息,并展示在我们的新闻中心页面上。

# urls.py
from django.urls import path
from app01 import viewsurlpatterns = [path("news", views.news),
]
# views.py
from django.shortcuts import render, HttpResponsedef news(req):import requestsheaders = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36',}params = {'pull_urls': 'news_top_2018',}response = requests.get('https://i.news.qq.com/trpc.qqnews_web.pc_base_srv.base_http_proxy/NinjaPageContentSync',params=params,headers=headers,)return render(req, 'news.html', {'data': response.json()})
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>新闻中心</title>
</head>
<body>
<h1>新闻中心</h1>
<ul>{% for item in data.data %}<li><a href="{{ item.url }}">{{ item.title }}</a></li>{% endfor %}
</ul>
</body>
</html>

最终效果:

下载综合案例源码

如果对您有所帮助的话感谢您点赞收藏。欢迎评论区留言讨论。

【Django】模板语法相关推荐

  1. Django 2.0 学习(12):Django 模板语法

    Django 模板语法 一.模板 只要是在html里面有模板语法就不是html文件了,这样的文件就叫做模板. 二.模板语法 模板语法变量:{{ }} 在Django模板中遍历复杂数据结构的关键是句点字 ...

  2. Django | 模板语法之标签的使用(if,for..)

    模板语法之标签 for循环 语法结构: {% for 变量名 in 待循环集 %}循环体代码 {% endfor %}# 可直接输入for按Tab键补全for循环的语法结构eg: {% for foo ...

  3. Django模板语法

    Django自带模板渲染的规则,分为三种 1.变量{{ }},就是从视图函数当中渲染的变量 最基本的变量可以是字典键映射的值 字典的值是多样的,可以嵌套的,所以,变量有以下用法 1.变量是字典类型,可 ...

  4. Python Django模板语法标签代码示例(页面渲染与取值)

  5. 6、Django模板语法

    123 转载于:https://www.cnblogs.com/pyedu/p/10289330.html

  6. Django 的模板语法之过滤器

    后端朝前端页面传递数据的方式# 第一种return render(request,'index.html',{'n':n})# 第二种return render(request,'index.html ...

  7. django之模板语法

    1. 变量 Django 模板中遍历复杂数据结构的关键是句点字符 句点符 views.py def index(request):'''模板语法:渲染变量 -> {{}}1. 深度查询,用的句点 ...

  8. Django从理论到实战(part19)--DTL模板语法

    学习笔记,仅供参考 参考自:Django打造大型企业官网–Huang Y:官方文档 本系列Blog以应用为主,理论基础部分我在后端专栏的Django系列博客已经写过了,如果有些需要补充的知识点,我会在 ...

  9. Python框架篇之Django(Template基础:模板语法、过滤器filter)

    文章目录 一.Template介绍 二.模板语法 三.过滤器(filter) 一.Template介绍 Python 代码编写和 HTML 设计是两项不同的工作,大多数专业的网站开发环境都将他们分配给 ...

  10. Python+django网页设计入门(17):模板语法及应用

    前导课程: Python+django网页设计入门(16):优化设计复用分页代码 Python+django网页设计入门(15):公用模板设计与使用 Python+django网页设计入门(14):使 ...

最新文章

  1. WCF之自定义信道工厂,信道监听器
  2. 2021 CCF颁奖典礼隆重举行
  3. 【字符串】最长回文子串 ( 动态规划算法 ) ★
  4. Jquery tmpl模板中if条件有多个时的写法
  5. 请简述php循环控制语句,PHP 循环控制语句几种方法详解_PHP教程
  6. 突然听到一只公鸡的局域网聊天软件
  7. 习题2.1 简单计算器 (20 分)
  8. Apollo 1 融合 Spring 的三个入口
  9. JavaScript学习笔记:创建自定义对象
  10. php soap function,从PHP SoapServer返回PHP数组
  11. System Center 2012 R2 CM系列之Configuration Manager系统需求
  12. php酒店预订源码,如家快捷酒店预订源码 for php
  13. 【Unity 题型】Unity基础
  14. Linux账号和权限管理
  15. 【转载】android开发笔记之fastboot的使用
  16. 畅视影院APP源码,电影网站app源码
  17. Excel:筛选后序号自动排序。
  18. 各代iphone尺寸_历代iPhone机身厚度对比: 6代最薄, iPhone X 难进前五
  19. top1-Accuracy,top5-Accuracy举例精析
  20. element-ui校验表单只能输入数字

热门文章

  1. CL/opencl.h: No such file or directory compilation terminated
  2. Movavi Screen Recorder for mac(屏幕录像编辑软件)
  3. electron实现桌面应用
  4. S32K的pwm_pal组件使用
  5. macbook频繁掉线的解决办法
  6. C# .NET编程基础-throw异常处理-Email格式检测示例
  7. Xorg设置显示器最佳分辨率的方法
  8. Linux C/C++网络编程实战-陈硕-笔记17-多个版本的Netcat概览
  9. 如何使用ABBYY FineReader PDF 15对比功能,数据纠错不用愁
  10. 秒杀多线程第二篇 多线程第一次亲密接触 CreateThread与_beginthreadex本质区别