Django学习(三) 之 模板中标签的使用
写在前面
最近看到稀土掘金在搞2023年终总结征文活动,一直想尝试投稿试试,周末我就花了近一下午时间写完初稿,然后周一、周二完成精读再改稿,感觉OK,昨晚凌晨第一时间在稀土掘金投稿。
结果,又发生了同样的事情。

同样的文章,在博客园上、公号上阅读量很OK,在稀土掘金上就上不来。


这应该是我博客园第四次上榜一了把,也是是第二次找到运营大大了,我都有点不好意思了,我好不容易鼓起勇气想投个稿,结果尴尬,不过后来运营大大也帮忙上推荐了,但是值得一说的是吗,这个掘金阅读量上不来,是我写的不行吗?回头我好好总结下,做个复盘。
先不想了,还是接着更文吧。
模板中标签的使用
Django的MVC思想,模板是一个文本,用于分离文档的表现形式和内容,而不是将数据与视图混合在一起
先创建静态文件,在mycontent/templates/下创建template_demo.html,暂时先不修改如内容,在django_project/settings.py,修改为如下代码:
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [BASE_DIR+"/mycontent/templates",], # 默认为[]
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
1、模板标签变量的使用
template_demo.html添加如下代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>TEMPLATE_DEMO</title>
</head>
<body>
<p>variables_demo: {{ name }}</p>
</body>
</html>
在mycontent/views.py中添加代码如下:
def variables_demo(request):
name = 'variables_demo'
return render(request, 'template_demo.html', {'name': name})
在django_project/urls.py中添加代码如下:
urlpatterns = [
path("index/", views.index),
re_path('^$', views.index),
url('^$', views.index),
url('^my_content/$', views.my_content),
url('^my_content/page=(\d+)$', views.pagehelper),
url('variables_demo/', views.variables_demo)
]
效果如下:

2、模板标签列表的使用
template_demo.html添加如下代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>TEMPLATE_DEMO</title>
</head>
<body>
<p>variables_demo: {{ name }}</p>
<p>list_demo: {{ list }}</p>
</body>
</html>
在mycontent/views.py中添加代码如下:
def list_demo(request):
list = ['list1','list2','list3']
return render(request, 'template_demo.html', {'list': list})
在django_project/urls.py中添加代码如下:
urlpatterns = [
path("index/", views.index),
re_path('^$', views.index),
url('^$', views.index),
url('^my_content/$', views.my_content),
url('^my_content/page=(\d+)$', views.pagehelper),
url('variables_demo/', views.variables_demo),
url('list_demo/', views.list_demo)
]
效果如下:

3、模板标签字典的使用
template_demo.html添加如下代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>TEMPLATE_DEMO</title>
</head>
<body>
<p>variables_demo: {{ name }}</p>
<p>list_demo: {{ list }}</p>
<p>dict_demo: {{ dict }}</p>
</body>
</html>
在mycontent/views.py中添加代码如下:
def dict_demo(request):
dict_demo = {'dict': 'dict_demo'}
return render(request, 'template_demo.html', {'dict': dict_demo})
在django_project/urls.py中添加代码如下:
urlpatterns = [
path("index/", views.index),
re_path('^$', views.index),
url('^$', views.index),
url('^my_content/$', views.my_content),
url('^my_content/page=(\d+)$', views.pagehelper),
url('variables_demo/', views.variables_demo),
url('list_demo/', views.list_demo),
url('dict_demo/', views.dict_demo),
]
效果如下:

知识点:
变量模板语法:
- view:{"HTML变量名" : "views变量名"}
- HTML:{{变量名}}
4、模板的一些特殊栗子
template_demo.html添加如下代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>TEMPLATE_DEMO</title>
</head>
<body>
<p>variables_demo: {{ name|safe }}</p>
<!-- 过滤器部分例子-->
<p>过滤器部分例子: {{ name|upper }}</p>
<!-- length例子-->
<p>length例子: {{ name|length }}</p>
<!-- 截断的字符串将以 ... 结尾。-->
<p>截断的字符串将以 ... 结尾: {{ name|truncatechars:2}}</p>
<p>list_demo: {{ list }}</p>
<p>list_demo: {{ list|first|upper }}</p>
<p>dict_demo: {{ dict }}</p>
</body>
</html>
在mycontent/views.py中添加代码如下:
def variables_demo(request):
name = '<script>alert("safe test!")</script>'
return render(request, 'template_demo.html', {'name': name})
效果如下:


知识点:
{{ views_str|safe }}:将字符串标记为安全,不需要转义,要保证 views.py 传过来的数据绝对安全,才能用 safe。
5、if/else、for标签、遍历字典的使用
if/else标签:
基本语法格式如下:
{% if condition %}
... display
{% endif %}
# 或者:
{% if condition1 %}
... display 1
{% elif condition2 %}
... display 2
{% else %}
... display 3
{% endif %}
根据条件判断是否输出。if/else 支持嵌套。
{% if %} 标签接受 and ,or或者 not 关键字来对多个变量做判断 ,或者对变量取反( not ),例如:
{% if athlete_list and coach_list %}
athletes 和 coaches 变量都是可用的。
{% endif %}
for 标签使用:
基本语法格式如下:
{% for athlete in athlete_list %}
{{ athlete.name }}
{% endfor %}
示例:
<ul>
{% for athlete in athlete_list %}
<li>{{ athlete.name }}</li>
{% endfor %}
</ul>
遍历字典的使用
{% for i,j in views_dict.items %}
{{ i }}---{{ j }}
{% endfor %}
效果如下:
6、注释标签
Django 注释使用 {# #}。
{# 这是一个注释 #}
写在最后
感觉有点像Java中的httl、jsp都有点像呢,马上熟悉感就来了,作为一个Java党,这突然而来的熟悉感,真的好亲戚,哈哈!
Django学习(三) 之 模板中标签的使用的更多相关文章
- django学习-7.html模板中include标签使用场景
1.前言 假设一个公司A有一个网站B,且网站B有5个不同的页面分别为C1,C2,C3,C4,C5. 那么,我们在打开这5个不同页面后去查看页面的整体内容,会发现每个页面的顶部内容.底部内容都一模一样. ...
- python 学习笔记十八 django深入学习三 分页,自定义标签,权限机制
django Pagination(分页) django 自带的分页功能非常强大,我们来看一个简单的练习示例: #导入Paginator>>> from django.core.p ...
- Django学习笔记之模板
模板 模板介绍 在之前的章节中,视图函数只是直接返回文本,而在实际生产环境中其实很少这样用,因为实际的页面大多是带有样式的HTML代码,这可以让浏览器渲染出非常漂亮的页面. 目前市面上有非常多的模板系 ...
- Django学习系列之模板系统
一.模板标签 if/else {% if %}标签检查一个变量的值是否为真或者等于另外一个值,如果为真,系统会执行{% if %}和{% endif %}之间的代码块,例如: {% if ...
- Django学习系列之模板
什么是django模板 模板是一个文本,用于分离文档的表现形式和内容,模板定义了占位符以及各种用于规范文档该如何显示的各部分基本逻辑(模板标签) 模板通常用于产生HTML 如何使用模板 创建一个Tem ...
- Django学习日记05_模板_模板语言
Variables 在模板中,使用两个大括号包含变量的方式来使用变量: {{ name }} 该变量应该作为键值对中的键,在Context中能被查找到. Tags 模板中使用Tags来进行简单的逻辑: ...
- Django学习日记04_模板_overview
通过Django中的模板,使得设计人员和网站管理有一个对接的接口,实现网页设计和逻辑的分离,因此,模板会处理大量的文本解析内容,django中内部使用了高效的引擎来完成模板解析. 模板设置 在使用模板 ...
- Django学习笔记之模板渲染、模板语言、simple_tag、母版子版、静态配置文件
一.首先我们用PyCharm来创建一个Django项目 终端命令:django-admin startproject sitename 图形创建: 这样一个Django项目就创建完成了,上面可以看 ...
- Django学习之 - 基础模板语言
模板语言if/else/endif {% if today_is_weekend %} <p>Welcome to the weekend!</p> {% else %} &l ...
- django url路径与模板中样式相对路径的问题
static目录下有css和js及image等文件夹,里面放置网站的一些静态文件,static位于网站根目录下,django中配置静态文件这个就细说,网上都有,昨天在添加新内容时发现一个问题,我的ur ...
随机推荐
- 《CTFshow-Web入门》05. Web 41~50
@ 目录 web41 题解 原理 web42 题解 原理 web43 题解 原理 web44 题解 原理 web45 题解 原理 web46 题解 原理 web47 题解 web48 题解 web49 ...
- Vue源码学习(五):<templete>渲染第四步,生成虚拟dom并将其转换为真实dom
好家伙, 前情提要: 在上一篇我们已经成功将ast语法树转换为渲染函数 现在我们继续 1.项目目录 代码已开源https://github.com/Fattiger4399/analytic ...
- 一文弄懂TypeScript中的混合
1.前言 由于TypeScrip中的类不支持多继承,所以引入了混合(Mixin)的特性,可以间接实现继承的效果. 2.正文 // 声明一个汽车类Vehicle,它有drive方法 class Vehi ...
- Avalonia开发(二)项目结构解析
一.前言 在Avalonia开发(一)环境搭建 文章中介绍了Avalonia的介绍.开发环境的搭建.项目创建,以及项目FirstAvaloniaApp项目结构的介绍.本篇文章将介绍各平台的项目介绍. ...
- Denpendcy Injection 8.0新功能——KeyedService
Denpendcy Injection 8.0新功能--KeyedService 本文只介绍 .NET Denpendcy Injection 8.0新功能--KeyedService,假定读者已熟练 ...
- 连接远程MySQL报错问题-Datagrip
前言: 记录:DataGrip连接远程服务器MySQL数据库报错问题. 问题: 1.Communications link failure--会话连接失败 原因分析: 1.端口被防火墙了 2.MySQ ...
- Graph RAG: 知识图谱结合 LLM 的检索增强
本文为大家揭示 NebulaGraph 率先提出的 Graph RAG 方法,这种结合知识图谱.图数据库作为大模型结合私有知识系统的最新技术栈,是 LLM+ 系列的第三篇,加上之前的图上下文学习.Te ...
- php反序列化--[SWPUCTF 2021 新生赛]no_wakeup
打开网站发现这个,点击 ??? 就看到了代码: 发现是PHP反序列化, 但和一般的PHP反序列化不同的是,多了一个_wakeup函数,然后就去网上搜了一下, 发现是一个cve漏洞CVE-2016-7 ...
- C++ STL标准容器的特点和典型的使用场景
概念和作用 C++标准模板库(Standard Template Library,STL)提供了一组通用的模板类和函数,用于处理常见的数据结构和算法.STL中的标准容器是其中的重要组成部分,它们提供了 ...
- 文心一言 VS 讯飞星火 VS chatgpt (116)-- 算法导论10.3 1题
一.用go语言,画图表示序列(13,4,8,19,5,11),其存储形式为多数组表示的双向链表.同样画出单数组表示的形式. 文心一言: 在Go语言中,我们无法直接画图,但我可以帮助你描述如何使用Go语 ...