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 template

register = 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>

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

工具学习_Cobalt Strike

1. Cobalt Strike 概述 Cobalt Strike 是一款基于 java 的渗透测试神器&#xff0c;常被业界人称为 CS 神器。自 3.0 以后已经不在使用 Metasploit 框架而作为一个独立的平台使用&#xff0c;分为客户端与服务端&#xff0c;服务端是一个&#xff0c;客户端可以有多个&#xf…

表格编辑demo

<el-form :model"form" :rules"status ? rules : {}" ref"form" class"form-container" :inline"true"><el-table :data"tableData"><el-table-column label"计算公式"><templat…

API 接口管理 架构 api接口设计

提供给第三方的业务接口应该如何设计呢&#xff1f;需要从哪些方面考虑&#xff1f;以及如何实现这些方面&#xff1f; 1、标准化 RESTful 2、安全性 1&#xff09;请求token&#xff08;防止接口被第三方调用&#xff09; token作为调用系统的凭证。token可以设置一次有效&…

UML 总结(基于《标准建模语言UML教程》)

定义 UML 又称为统一建模语言或标准建模语言&#xff0c;是一种标准的图形化建模语言&#xff0c;它是面向对象分析与设计的一种标准表示。尽管UML 本身没有对过程有任何定义&#xff0c;但UML 对任何使用它的方法&#xff08;或过程&#xff09;提出的要求是&#xff1a;支持用…

Linux初阶——信号

一、预备 1、信号的处理方式 1.1. 默认动作 当收到一个信号时&#xff0c;就执行这个信号的默认动作。 1.2. 忽略 当收到一个信号时&#xff0c;就忽略执行这个信号的默认动作。 1.3. 自定义动作 当收到一个信号时&#xff0c;就执行信号的自定义动作。 2、硬件中断 你…

IT监控对接华三CAS云管平台监控方案

概述 CAS云管平台是新华三集团自主研发的虚拟化和云计算管理平台&#xff0c;它主要面向数据中心&#xff0c;提供虚拟化和云计算管理&#xff0c;在教育行业、网络安全领域、高性能计算业务、企业IT部门等领域被广泛应用。在信创国产化背景下&#xff0c;以CAS、Fusion等为代…

Ajax:表单 模板引擎

Ajax&#xff1a;表单 & 模板引擎 form 表单form 属性 Ajax操控表单事件监听阻止默认行为收集表单数据 模板引擎art-template{{}}语法原文输出条件输出循环输出过滤器 原理 form 表单 在HTML中&#xff0c;可以通过<form>创建一个表单&#xff0c;收集用户信息。而采…

基于centos7.9搭建在线购物网站

mall 搭建数据库配置Java配置jar包 一款模仿天猫的在线购物网站&#xff0c;基于centos7.9搭建 搭建数据库 官网下载软件包后上传 基于centos7.9搭建mysql5.6.42 [rootmysql02 ~]# ls anaconda-ks.cfg init.sh MySQL-5.6.42-1.el7.x86_64.rpm-bundle.tar解压 tar -xf My…

Python 自动化运维:Python基础知识

Python 自动化运维&#xff1a;Python基础知识 目录 &#x1f4ca; Python 基础复习 数据类型、控制结构与常用函数面向对象编程&#xff08;OOP&#xff09;与类的使用函数式编程概念与 lambda 表达式异常处理与日志记录的基本实践 1. &#x1f4ca; Python 基础复习 数据…

【论文阅读】Tabbed Out: Subverting the Android Custom Tab Security Model

论文链接&#xff1a;Tabbed Out: Subverting the Android Custom Tab Security Model | IEEE Conference Publication | IEEE Xplore 总览 “Tabbed Out: Subverting the Android Custom Tab Security Model” 由 Philipp Beer 等人撰写&#xff0c;发表于 2024 年 IEEE Symp…

word技巧:如何禁止复制word文件内容?

在文档管理与协作的复杂环境中&#xff0c;确保文档内容的完整性和安全性至关重要。Microsoft Word作为一款广泛使用的文字处理软件&#xff0c;提供了强大的限制编辑功能&#xff0c;允许用户控制对文档内容的修改权限&#xff0c;有效防止未经授权的更改。本文将深入解析Word…

LabVIEW如何学习数据结构和算法

作为LabVIEW程序员&#xff0c;在学习数据结构和算法时&#xff0c;由于LabVIEW以图形编程为主&#xff0c;与传统编程语言的学习方式有些不同。因此&#xff0c;理解算法思想并将其在LabVIEW中实现是关键。 ​ 1. 夯实编程基础概念 LabVIEW与文本编程语言在实现逻辑上的方式…

Maven项目报错:invalid LOC header (bad signature)

文章目录 Maven项目报错&#xff1a;invalid LOC header (bad signature)1. Maven项目加载或Pom.Xml刷新后仍出现如下错误2. 解决方法 Maven项目报错&#xff1a;invalid LOC header (bad signature) 1. Maven项目加载或Pom.Xml刷新后仍出现如下错误 错误提示&#xff1a; in…

方形件排样优化与订单组批问题探析

方形件排样优化与订单组批问题是计算复杂度很高的组合优化问题&#xff0c;在工业工程中有很广泛的应用背景。为实现个性化定制生产模式&#xff0c;企业会选择订单组批的方式&#xff0c;继而通过排样优化实现批量切割&#xff0c;加工完成后再按照不同客户需求进行分拣&#…

高质量短视频素材平台推荐

在当今短视频内容日益增长的时代&#xff0c;拥有高质量的素材显得尤为重要。以下是一些值得关注的短视频素材平台&#xff0c;它们各具特色&#xff0c;适合不同需求的创作者。 蛙学网 蛙学网专注于提供高质量的短视频素材&#xff0c;适合各种创作需求。虽然该平台需要订阅&a…

DerpNStink: 1渗透测试

靶机&#xff1a;DerpNStink: 1 <https://www.vulnhub.com/entry/derpnstink-1,221/> 攻击机&#xff1a;kail linux 2024 目标&#xff1a;获得4个flag 1,将两台虚拟机网络连接都改为NAT模式&#xff0c;并查看靶机的MAC地址 2&#xff0c;攻击机上做主机扫描发现靶机 靶…

#HarmonyOS:页面和自定义组件生命周期

页面生命周期 即被Entry装饰的组件生命周期 onPageShow&#xff1a;页面每次显示时触发一次&#xff0c;包括路由过程、应用进入前台等场景。onPageHide: 页面每次隐藏时触发一次&#xff0c;包括路由过程、应用进入后台等场景。onBackPress: 当用户点击返回按钮是触发 组件…

自定义类型:联合和枚举【上】

自定义类型&#xff1a;数组&#xff0c;结构体&#xff0c;联合体&#xff0c;枚举。前面一些我们已经讲过了&#xff0c;接下来我们讲联合体和枚举。 一.联合体 1.联合体类型的声明 像结构体一样&#xff0c;联合体也是由一个或者多个成员构成&#xff0c;这些成员可以不同…

网络搜索引擎Shodan(2)

声明&#xff1a;学习视频来自b站up主 泷羽sec&#xff0c;如涉及侵权马上删除文章 声明&#xff1a;本文主要用作技术分享&#xff0c;所有内容仅供参考。任何使用或依赖于本文信息所造成的法律后果均与本人无关。请读者自行判断风险&#xff0c;并遵循相关法律法规。 感谢泷…

(南京观海微电子)——GH7006-01_HKC_B3-PV043WVQ-N80_MIPI_LVDS_RGB原理及代码介绍

1. 原理 2. 代码 /**************************************************/ // Model - GV050WVQ-N82 // IC - GH7006 // Width - 800 // Height - 480 // REV: - V01 // DATA - 20240621 // INTERFACE- LV…