当前位置: 首页 > article >正文

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>


http://www.kler.cn/news/366316.html

相关文章:

  • git安装-Tortoise git 安装汉化教程
  • 聊一聊为什么企业数字化转型总是三天热度
  • 数据仓库宽表概述
  • C++学习路线(二十二)
  • QT-使用QSS美化UI界面
  • 苹果瑕疵数据集苹果质量数据集YOLO格式VOC格式 深度学习 目标检测 数据集
  • AJAX—— jQuery 发送 AJAX 请求
  • Linux笔记---Makefile的简单用法
  • 【python】--python进阶学习
  • 新书速览|Spring+Spring MVC+MyBatis从零开始学(视频教学版)(第3版)
  • WORFBENCH:一个创新的评估基准,目的是全面测试大型语言模型在生成复杂工作流 方面的性能。
  • openEuler 服务器系统优化技巧
  • Java应用程序的测试覆盖率之设计与实现(三)-- jacoco cli 客户端
  • wxWidgets开发最佳IDE选哪个?界面设计器选wxSmith还是wxFormBuilder,wxCrafter?
  • Selenium处理验证码
  • 什么是MySQL索引?为什么要有索引?
  • UDP(用户数据报协议)端口监控
  • 软件标书技术方案,需求方案,模板套用,公共内容借鉴参考,各类系统方案大全(word原件)
  • 【机器学习基础】卷积保持通道数不变原因
  • 合约门合同全生命周期管理系统:企业合同管理的数字化转型之道
  • 鲸鱼优化算法(Whale Optimization Algorithm, WOA)原理与MATLAB例程
  • jenkins ssh 免密报错Host key verification failed.
  • 云计算欲上九天,AI大模型能否推波助澜?
  • 守护头顶安全——AI高空抛物监测,让悲剧不再重演
  • 从头学PHP之运算符
  • Unity中使用UnityEvent遇到Bug