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 ...
随机推荐
- 《Linux基础》02. 目录结构 · vi、vim · 关机 · 重启
@ 目录 1:目录结构 2:vi.vim快速入门 2.1:vi 和 vim 的三种模式 2.1.1:一般模式 2.1.2:编辑模式 2.1.3:命令模式 2.2:常用快捷键 2.2.1:一般模式 2. ...
- Ubuntu Linux 更换国内源
Ubuntu的官方源对于国内用户来说是比较慢的,可以将它的源换成国内的源,用起来就快很多了. # Ubuntu server 环境 ubuntu@ubuntu:~$ sudo su - [ sudo ...
- vsftp简单配置
添加用户 vi /etc/pam.d/vsftdp 注释掉 auth required pam_shells.so
- 动态规划二 & 贪心算法 实验三
一.贪心算法和动态规划法解决背包问题. 有一个背包其容积 C = 13.现有表格内的物品可以购买. 商品 价格 P 体积 V 啤酒 24 10 汽水 2 3 饼干 9 4 面包 10 5 牛奶 9 4 ...
- 【接口自动化测试】Eolink Apilkit 安装部署,支持 Windows、Mac、Linux 等系统
Eolink Apikit 有三种客户端,可以依据自己的情况选择.三种客户端的数据是共用的,因此可以随时切换不同的客户端. 我们推荐使用新推出的 Apikit PC 客户端,PC 端拥有线上产品所有的 ...
- golang .(type)语法
一直弄不懂 .(type) 是啥,在 liteide 中输出 (1+1).(type),提示: use of .(type) outside type switch 于是搜索到这个文章: 作者:翔云翔 ...
- Springboot简单功能示例-1 实现基本WEB服务
springboot-sample 介绍 springboot简单示例 跳转到发行版 查看发行版说明 软件架构(当前发行版使用) springboot 安装教程 git clone --branch ...
- Python基础——函数的理解、函数对象、函数嵌套、闭包函数、及其应用
文章目录 函数也是变量 可以赋值 可以当做函数当做参数传给另外一个函数 可以当做函数当做另外一个函数的返回值 可以当做容器类型的一个元素 函数对象应用示范 原始版 修正版 函数嵌套 函数的嵌套调用 函 ...
- FFmpeg: How To Convert MP4 Video To MP3 Audio?
FFmpeg: How To Convert MP4 Video To MP3 Audio? Learn how to Convert an MP4 Video to MP3 Audio wit ...
- RatingBar android 自定义 评级 星星
资源下载地址 <!-- xml 中的使用 --> <RatingBar android:id="@+id/ratingBar" android:layout_wi ...