[Python]Django模板的配置及其语法(一)

简介: [Python]Django模板的配置及其语法

f33a5edb617c40828177e7a34f5b7339.jpg

前言

系列文章目录

[Python]目录

视频及资料和课件

链接:https://pan.baidu.com/s/1LCv_qyWslwB-MYw56fjbDg?pwd=1234

提取码:1234

1. 模板的配置

在项目中单独创建一个文件夹templates,用于存放模板。

设置模板的查找路径

'DIRS': [ os.path.join(BASE_DIR, 'template') ],
• 1

2. 定义模板

定义模板其实就是定义一个html页面

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h1>hello world</h1>
    {#  name 为模板等待接收的数据,需要View查询数据库传入模板  #}
    <h1>你好 {{ name }}</h1>
</body>
</html>

3. 模板的使用

调用模板分为两步骤:

  1. 找到模板,模板文件在模板目录中的相对路径 -> 返回模板对象
  2. 渲染模板

渲染模板使用Django提供的函数render()

render(request对象, 模板文件路径, 模板数据字典)
from django.shortcuts import render
from django.http import HttpRequest
from django.http import HttpResponse
from django.http import JsonResponse
from django.shortcuts import redirect
from django.urls import reverse
import json
from django.views import View
# Create your views here.
# 使用类视图
class LoginView(View):
  # get用于处理页面资源的获取
    def get(self, request):
        # 假设姓名数据为 张三
        name = '张三'
        # 组织传递给模板的数据
        # 将数据传递给模板,需要使用字典进行传递
        context = {
            'name': name
        }
        # render第一个参数为请求对象,第二个参数为模板路径,第三个参数为数据字典
        # 对模板进行渲染,并返回渲染后的页面
        return render(request, 'index.html', context)
    def post(self, request):
        return HttpResponse('post')

路由配置

urlpatterns = [
    path('admin/', admin.site.urls),
    path('login/', include(('login.urls', 'login'), namespace='login')),
    path('book/', include(('book.urls', 'book'), namespace='book'))
]
from django.urls import path
from login import views
urlpatterns = [
    path('', views.login),
    path('set_cookie/', views.set_cookie),
    path('get_cookie/', views.get_cookie),
    path('del_cookie/', views.del_cookie),
    path('set_session/', views.set_session),
    path('get_session/', views.get_session),
    path('class_login/', views.LoginView.as_view())
]

4. 模板语法

准备将要渲染到页面的数据:

class LoginView(View):
    def get(self, request):
        # 假设从数据库中查询出来的姓名为 张三
        name = '张三'
        # 将数据传递给模板,需要使用字典进行传递
        context = {
            'name': name,
            'age': 24,
            'birthday': datetime.now(),
            'friends': ['tom', 'jack', 'rose'],
            'money': {
                '2019': 12000,
                '2020': 15000,
                '2021': 20000
            }
        }
        # render第一个参数为请求对象,第二个参数为模板路径,第三个参数为数据字典
        return render(request, 'index.html', context)
    def post(self, request):
        return HttpResponse('post')

4.1 模板变量

变量名必须由字母、数字、下划线(不能以下划线开头)和点组成。

模板变量的变量名要与传递进来的数据的变量名一致

语法如下:

{{ 模板变量 }}

模板变量可以使python的内建类型,也可以是对象。

4.2 获取指定的数据

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h1>hello world</h1>
    {#  name 为模板等待接收的数据,需要View查询数据库传入模板  #}
    <h1>你好 {{ name }}</h1>
    <p>年龄:{{ age }}</p>
    <p>生日:{{ birthday }}</p>
    <p>朋友:{{ friends }}</p>
    {#  获取列表中的某个元素,使用点+下标的方式进行获取  #}
    <p>女朋友:{{ friends.2 }}</p>
    {#  获取字典中的某个元素,使用点+key的形式获取  #}
    <p>第一年的薪资:{{ money.2019 }}</p>
</body>
</html>

4.3 模板中的for循环

语法:

{%  for item in items  %}
  循环体
{%  endfor  %}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h1>hello world</h1>
    {#  name 为模板等待接收的数据,需要View查询数据库传入模板  #}
    <h1>你好 {{ name }}</h1>
    <p>年龄:{{ age }}</p>
    <p>生日:{{ birthday }}</p>
    <p>朋友:</p>
    <ul>
        {#    for 循环    #}
        {% for friend in friends %}
            {#    forloop.counter 获取循环的次序,forloop.count0 获取下标    #}
            <li>{{ forloop.counter }} {{ forloop.counter0 }} {{ friend }}</li>
        {% endfor %}
    </ul>
    {#  获取列表中的某个元素,使用点+下标的方式进行获取  #}
    <p>女朋友:{{ friends.2 }}</p>
    {#  获取字典中的某个元素,使用点+key的形式获取  #}
    <p>第一年的薪资:{{ money.2019 }}</p>
</body>
</html>

4.4 if语句

语法:

注意:符号的两边要有空格

{% if age < 10 %}
    ...
{% elif age >= 10 and age < 20 %}
    ...
{% else %}
    ...
{% endif %}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h1>hello world</h1>
    {#  name 为模板等待接收的数据,需要View查询数据库传入模板  #}
    <h1>你好 {{ name }}</h1>
    <p>年龄:{{ age }}</p>
    <p>
        {% if age < 10 %}
            年龄小于10
        {% elif age >= 10 and age < 20 %}
            年龄大于10小于20
        {% else %}
            年龄大于20
        {% endif %}
    </p>
    <p>生日:{{ birthday }}</p>
    <p>朋友:</p>
    <ul>
        {#    for 循环    #}
        {% for friend in friends %}
            {#    forloop.counter 获取循环的次序,forloop.count0 获取下标    #}
            <li>{{ forloop.counter }} {{ forloop.counter0 }} {{ friend }}</li>
        {% endfor %}
    </ul>
    {#  获取列表中的某个元素,使用点+下标的方式进行获取  #}
    <p>女朋友:{{ friends.2 }}</p>
    {#  获取字典中的某个元素,使用点+key的形式获取  #}
    <p>第一年的薪资:{{ money.2019 }}</p>
</body>
</html>

4.5 模板语法中的运算符

比较运算符如下:

==
!=
<
>
<=
>=

布尔运算符如下:

and
or
not

4.6 模板语法中的注释

1)单行注释语法如下:

{# 注释内容 #}

2)多行注释使用comment标签,语法如下:

{% comment %}
  注释内容
{% endcomment %}

5. 过滤器

Django v4.0 中文文档

过滤器的本质为一个函数。

语法如下:

变量|过滤器:参数
  • 使用管道符号|来应用过滤器,用于进行计算、转换操作,可以使用在变量、标签中。
  • 如果过滤器需要参数,则使用冒号:传递参数。

常见的过滤器:

  • safe,禁用转义,告诉模板这个变量是安全的,可以解释执行
  • length,长度,返回字符串包含字符的个数,或列表、元组、字典的元素个数。
  • default,默认值,如果变量不存在时则返回默认值。
  • date,日期,用于对日期类型的值进行字符串格式化,常用的格式化字符如下:
  • Y表示年,格式为4位,y表示两位的年。
  • m表示月,格式为01,02,12等。
  • d表示日, 格式为01,02等。
  • j表示日,格式为1,2等。
  • H表示时,24进制,h表示12进制的时。
  • i表示分,为0-59。
  • s表示秒,为0-59。
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h1>hello world</h1>
    {#  name 为模板等待接收的数据,需要View查询数据库传入模板  #}
    <h1>你好 {{ name }}</h1>
    <p>年龄:{{ age }}</p>
    <p>
        {% if age < 10 %}
            年龄小于10
        {% elif age >= 10 and age < 20 %}
            年龄大于10小于20
        {% else %}
            年龄大于20
        {% endif %}
    </p>
    <p>生日:{{ birthday|date:'Y-m-d H:i:s' }}</p>
    <p>朋友:</p>
    <ul>
        {#    for 循环    #}
        {% for friend in friends %}
            {#    forloop.counter 获取循环的次序,forloop.count0 获取下标    #}
            <li>{{ forloop.counter }} {{ forloop.counter0 }} {{ friend }}</li>
        {% endfor %}
    </ul>
    {#  获取列表中的某个元素,使用点+下标的方式进行获取  #}
    <p>女朋友:{{ friends.2 }}</p>
    {#  获取字典中的某个元素,使用点+key的形式获取  #}
    <p>第一年的薪资:{{ money.2019 }}</p>
</body>
</html>



相关文章
|
10天前
|
人工智能 Ubuntu IDE
【Python】基础:环境配置与基础语法
本文介绍了Python编程语言及其环境配置方法。Python由Guido van Rossum于1991年创建,以其简洁、易学和强大的功能著称。文章详细讲解了Python的主要特点、Windows和Ubuntu下的安装配置步骤、基础语法、控制流、函数、文件操作、模块使用及面向对象编程等内容,帮助读者快速入门Python编程。
39 4
|
3天前
|
安全 数据库 C++
Python Web框架比较:Django vs Flask vs Pyramid
Python Web框架比较:Django vs Flask vs Pyramid
12 1
|
5天前
|
存储 程序员 开发者
Python编程入门:从零开始掌握基础语法
【10月更文挑战第21天】本文将带你走进Python的世界,通过浅显易懂的语言和实例,让你快速了解并掌握Python的基础语法。无论你是编程新手还是想学习一门新的编程语言,这篇文章都将是你的不二之选。我们将一起探索变量、数据类型、运算符、控制结构、函数等基本概念,并通过实际代码示例加深理解。准备好了吗?让我们开始吧!
|
14天前
|
安全 数据库 C++
Python Web框架比较:Django vs Flask vs Pyramid
Python Web框架比较:Django vs Flask vs Pyramid
16 4
|
16天前
|
安全 数据库 C++
Python Web框架比较:Django vs Flask vs Pyramid
【10月更文挑战第10天】本文比较了Python中三个最受欢迎的Web框架:Django、Flask和Pyramid。Django以功能全面、文档完善著称,适合快速开发;Flask轻量灵活,易于上手;Pyramid介于两者之间,兼顾灵活性和安全性。选择框架时需考虑项目需求和个人偏好。
25 1
|
20天前
|
安全 数据库 C++
Python Web框架比较:Django vs Flask vs Pyramid
【10月更文挑战第6天】本文比较了Python中三个最受欢迎的Web框架:Django、Flask和Pyramid。Django功能全面,适合快速开发;Flask灵活轻量,易于上手;Pyramid介于两者之间,兼顾灵活性和可扩展性。文章分析了各框架的优缺点,帮助开发者根据项目需求和个人偏好做出合适的选择。
27 4
|
17天前
|
关系型数据库 MySQL Java
Django学习二:配置mysql,创建model实例,自动创建数据库表,对mysql数据库表已经创建好的进行直接操作和实验。
这篇文章是关于如何使用Django框架配置MySQL数据库,创建模型实例,并自动或手动创建数据库表,以及对这些表进行操作的详细教程。
47 0
Django学习二:配置mysql,创建model实例,自动创建数据库表,对mysql数据库表已经创建好的进行直接操作和实验。
|
26天前
|
存储 Shell 数据库
Python编程--Django入门:用户账户(二)
Python编程--Django入门:用户账户(二)
16 2
|
26天前
|
存储 数据库 Python
Python编程--Django入门:用户账户(一)
Python编程--Django入门:用户账户(一)
16 1
|
6月前
|
开发框架 开发者 Python
深入探究Python Web开发框架:Flask与Django
Python作为一种广泛应用于Web开发的编程语言,其拥有众多优秀的Web开发框架。本文将深入探讨其中两大知名框架——Flask与Django。通过对它们的概念与实践进行比较分析,帮助读者更好地理解和选择适合自己项目需求的Web开发框架。