django(3)jinja2模版的使用

启动模版

安装jinja2

pip install jinja2

配置setting

TEMPLATES中添加配置

    {'BACKEND': 'django.template.backends.jinja2.Jinja2','DIRS': [os.path.join(BASE_DIR,'jinja2')],  #模版在项目中的所在位置}

template中各项的含义

这个配置项中模版自上而下加载,重名优先使用上面的

TEMPLATES = [{# 配置哪一种模版'BACKEND': 'django.template.backends.django.DjangoTemplates',   # django默认的自带模版# 存放模版的目录位置# 'DIRS': [BASE_DIR / 'templates']'DIRS': [os.path.join(BASE_DIR,'templates')]    # 用os拼接,找到模版所在位置,# 模版应用范围,True为全局(整个工程下)'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',],},},{'BACKEND': 'django.template.backends.jinja2.Jinja2','DIRS': [os.path.join(BASE_DIR,'jinja2')],  #模版在项目中的所在位置}
]

新建jinja2的模版目录

根据新配置的 'DIRS': [os.path.join(BASE_DIR,'jinja2')],新建jinja2文件夹

这样使用在视图中使用render的时候就可以直接找到jinja2目录下的文件了

def go_jinja2(request):return render(request,"jinja2_home.html")

编辑模版

变量

模版中的变量用{{}}包裹{{变量名}},插值表达式

传入模版的参数可以是字符,数字,对象,列表

<body>
<h1>h1标签</h1>
<p>用户名:{{ username }}</p>
<p>年龄:{{ age }}</p>
<p><img src="{{ img_url }}" alt=""></p>
<p>用户列表</p>
</body>

模版标签

用{%%}包裹循环或判断

<body>
<h1>h1标签</h1>
<p>用户名:{{ username }}</p>
<p>年龄:{{ age }}</p>
<p><img src="{{ img_url }}" alt=""></p>
<p>用户列表</p>
{% for user in list_users %}
<p>{{ user.username }}&emsp;{{ user.age }}</p>
{% endfor %}
</body>

循环:

循环 
{% for user in list_users %}        {% endfor %}
字典循环
{% for key,values in data.items %}         {% endfor %}
重复循环(循环嵌套)
{% cycle "row1" "row2" %}
循环中的变量
forloop.first如果是第一次迭代,为True
forloop.last如果是最后一次迭代,为True
forloop.counter0计数器,从0开始
forloop.counter计数器,从1开始

eg:

def tag(request):list_user = [{"name": "ikun1","age": 2.5},{"name": "ikun2","age": 2.5,"sex":"沃尔玛购物袋"}]return render(request,"tag.html",{"list_user":list_user})
<head><meta charset="UTF-8"><title>Title</title><style>.row1{color: red;}.row2{color: green;}</style>
</head>
<body>
<h1>用户列表</h1>
{% for i in list_user %}<p class="{% cycle 'row1' 'row2' %}">第{{ forloop.counter }}个用户</p>{% for key,value in i.items %}<p>{{ key }} = {{ value }}</p>{% endfor %}
{% empty %}<p>无</p>
{% endfor %}
</body>

判断

{% if 条件 %}        {% endif %}
<body>  {% if user.role == 'admin' %}  <p>Hello, Admin!</p>  {% elif user.role == 'editor' %}  <p>Hello, Editor!</p>  {% else %}  <p>Hello, Regular User!</p>  {% endif %}  
</body> 

url标签

可以获取静态文件,解析静态文件 

setting中设置好资源目录和链接

STATIC_URL = "/static/"
STATIC_ROOT = [os.path.join(BASE_DIR,"static")]
# STATICFILES_DIRS = [os.path.join(BASE_DIR,"static")]
<img src="{% static 'images/ikun.jpg' %}" alt="">

 时间

见官网

 内置模板标签和过滤器 | Django 文档 | Django

eg:

{% now 'j S F Y H:i:s' %}

 注释

{# html注释在源代码中能看到内容,标签注释在编译时就将注释内容去掉了 #}

 过滤器

首先在模块下新建一个叫templatetags的包

在包下新建过滤器文件

from django import templateregister = template.Library()
# 注册过滤器
@register.filter(name='fmt_uname')# 用户名格式化
def fmt_uname(value):return "{}***".format(value[0])

这样过滤器就创建好了

测试

def mine_filter(request):username = "三"return render(request, "mine_filter.html", {"username": username})
<p>{{ username | fmt_uname }}</p>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/56366.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring Boot框架的电影评论系统设计与实现

3系统分析 3.1可行性分析 通过对本电影评论网站实行的目的初步调查和分析&#xff0c;提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本电影评论网站采用SSM框架&#xff0c;JAVA作为开发语言&#…

基于单片机的智能小区门禁系统设计(论文+源码)

1总体架构 智能小区门禁系统以STM32单片机和WiFi技术为核心&#xff0c;STM32单片机作为主控单元&#xff0c;通过WiFi模块实现与手机APP的连接&#xff0c;构建整个门禁系统。系统硬件包括RFID模块、指纹识别模块、显示屏、按键以及继电器。通过RFID绑定IC卡、APP面部识别、指…

HarmonyOS鸿蒙分布式文件操作的时候权限问题

对于分布式文件跨设备操作的时候&#xff0c;一定记得设置文件等级权限&#xff0c;否则会出现各种不同的异常&#xff1a; setSecurityLabel 设置文件权限 代码&#xff1a; //设置文件权限securityLabel.setSecurityLabel(destUriPath, s1).then(() > {PhLog.info(Succee…

红队-安全见闻篇(下)

声明 学习视频来自B站UP主 泷羽sec的个人空间-泷羽sec个人主页-哔哩哔哩视频,如涉及侵权马上删除文章 笔记的只是方便各位师傅学习知识,以下网站只涉及学习内容,其他的都与本人无关,切莫逾越法律红线,否则后果自负 硬件设备(知道对应的硬件上对应的扫描器就性) 一、硬件设备…

PHP中‘BITWISE AND‘运算符和‘LOGICAL AND‘运算符的区别

在PHP中&#xff0c;BITWISE AND&#xff08;位与&#xff09;运算符和LOGICAL AND&#xff08;逻辑与&#xff09;运算符都用于执行与操作&#xff0c;但它们作用于不同的数据类型&#xff0c;并产生不同的结果。 BITWISE AND 运算符 定义&#xff1a; BITWISE AND运算符&am…

Linux中Kconfig结构分析

目录结构中&#xff0c;某一层的内容无非就是&#xff0c;要么全是目录&#xff0c;要么全是文件&#xff0c;要么既有目录又有文件&#xff0c;我们的Kconfig文件通常是分布在各级目录中。那么&#xff0c;这些Kconfig如何一层一层地去组织起来呢&#xff1f; 首先明确下&…

切换主题的方案

1、link标签动态引入 其做法就是提前准备好几套CSS主题样式文件&#xff0c;在需要的时候&#xff0c;创建link标签动态加载到head标签中&#xff0c;或者是动态改变link标签的href属性 优点&#xff1a;实现了按需加载&#xff0c;提高了首屏加载时的性能 缺点&#xff1a; …

VTK的学习方法-第二类型应用

VTK的高级使用方法是自己写一个算法&#xff08;Filter&#xff09;&#xff0c;本文使用的数据类型位polydata&#xff0c;这个数据类型应用比较广泛。 我们的算法一般是继承VTK里面的vtkpolydataalgorithm&#xff0c;然后自己添加一些变量&#xff0c;重写&#xff08;over…

在Ubuntu 20.04 上安装 CoppeliaSim

在 Ubuntu 20.04 上安装 CoppeliaSim Edu V4.6.0 rev18 的步骤如下&#xff1a; 1. 下载安装文件: 首先&#xff0c;确保您已经下载了 CoppeliaSim_Edu_V4_6_0_rev18_Ubuntu20_04.tar.xz 文件。您可以从 Coppelia Robotics 的官方网站下载。 2. 解压缩文件: 打开终端&#…

关于Oracle透明数据加密(TDE)的两个概念

在上一篇文章“Oracle TDE和表空间中的数据量有关系吗&#xff1f;”中&#xff0c;我们证明了加密和解密的时间和表空间内是否有数据没有关系。 本文论证&#xff1a;加密和解密的时间基本相等&#xff0c;如果是Exadata&#xff0c;解密会稍快&#xff0c;因为Exadata支持解…

开发面试题-更新中...

探迹科技&#xff08;腾讯面试官&#xff09; 1.了不了解循环屏障 2.对于java中的线程冲突有多少了解&#xff08;我要算1加到1亿&#xff09; 3.mysql调优怎么调&#xff08;我跟他讲了explain&#xff09; 4.type中ref&#xff0c;range,const的区别 5.我有1亿的数据量&…

京东 北京 java 中级: 哪些情况下的对象会被垃圾回收机制处理掉? 哪些对象可以被看做是 GC Roots 呢?对象不可达,一定会被垃圾收集器回收么?

我同学最近在面试java的岗位, 这是他遇到的某些关于java的JVM中垃圾回收相关的部分的问题, 他来问我, 我特以此文章来解答. 公司 京东 base 北京 面试时间 2024年10月23日16:00:00 他跟我说, 面试官一上来就问了一个关于JVM的问题, 直接就给他难住了, 问题是 : 哪些情况下…

深入理解Qt中的QTableView、Model与Delegate机制

文章目录 显示效果QTableViewModel(模型)Delegate(委托)ITEM控件主函数调用项目下载在Qt中,视图(View)、模型(Model)和委托(Delegate)机制是一种非常强大的架构,它们实现了MVC(模型-视图-控制器)设计模式。这种架构分离了数据存储(模型)、数据展示(视图)和数据操作(委托),使…

通过Python爬虫获取商品销量数据,轻松掌握市场动态

为什么选择Python爬虫&#xff1f; 简洁易用&#xff1a;Python语言具有简洁的语法和丰富的库&#xff0c;使得编写爬虫变得简单高效。强大的库支持&#xff1a;Python拥有强大的爬虫框架&#xff08;如Scrapy、BeautifulSoup、Requests等&#xff09;&#xff0c;可以快速实现…

【记录】Django数据库的基础操作

数据库连接 在Django中使用 mysqlclient 这个包用于数据库的连接&#xff0c;切换至 Django环境中直接 pip install mysqlclient 安装此包 1 数据库连接配置 在项目目录下的setting.py中配置 DATABASES {default: {ENGINE: django.db.backends.mysql,NAME: mini,#数据库名US…

Tips--解决更新resource.qrc之后新的资源无法加载的问题

解决更新resource.qrc之后新的资源无法加载的问题 问题原因解决方法 问题 在使用pyQT或者pyside开发桌面程序的时候&#xff0c;resource.qrc是整合资源文件的地方&#xff0c;如下所示 <!DOCTYPE RCC><RCC version"1.0"> <qresource><file&g…

uniapp修改input中placeholder样式

Uniapp官方提供了两种修改的属性方法&#xff0c;但经过测试&#xff0c;只有 placeholder-class 属性能够生效 <input placeholder"请输入手机验证码" placeholder-class"input-placeholder"/><!-- css --> <style lang"scss" s…

Vue--绑定class样式

有三种方式&#xff1a; 1、字符串写法(freeA) 适用于&#xff1a;样式的类名不确定&#xff0c;需要动态指定 2、数组写法(freeB) 适用于&#xff1a;要绑定的样式个数不确定&#xff0c;名字也不确定 3、对象写法(freeC) 适用于&#xff1a;要绑定的样式个数确定&#xff0c…

Python的买家秀大揭秘:用代码点亮API数据

在一个充满无限可能的数字世界里&#xff0c;Python侦探正准备开始他的新任务&#xff1a;揭开买家秀API数据的神秘面纱。这不仅是一次技术的挑战&#xff0c;更是一次与时间赛跑的较量。Python侦探&#xff0c;这位编程界的福尔摩斯&#xff0c;打开了他的笔记本电脑&#xff…

sealed class-kotlin中的封闭类

在 Kotlin 中&#xff0c;sealed class&#xff08;密封类&#xff09;是一种特殊的类&#xff0c;用于限制继承的类的数量。密封类可以被用来表示一组有限的类型&#xff0c;通常用于状态管理或表达多种可能的错误类型。 密封类用 sealed 关键字定义&#xff0c;这意味着只能…