[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>



相关文章
|
8天前
|
数据安全/隐私保护 Python
Python以及基础语法保姆级教程(超详细)-3
Python以及基础语法保姆级教程(超详细)
|
1天前
|
自然语言处理 JavaScript 前端开发
Python高级语法与正则表达式(二)
正则表达式描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串、将匹配的子串做替换或者从某个串中取出符合某个条件的子串等。
|
1天前
|
安全 算法 Python
Python高级语法与正则表达式(一)
Python提供了 with 语句的写法,既简单又安全。 文件操作的时候使用with语句可以自动调用关闭文件操作,即使出现异常也会自动关闭文件操作。
|
1天前
|
存储 JSON 数据格式
Python基础语法汇总【保姆级小白教程】
我将 Python语法分为14个章节,从第一章Python基础概念到第14章模块&异常处理,本篇文章将逐一为大家讲述.
30 0
Python基础语法汇总【保姆级小白教程】
|
4天前
|
存储 搜索推荐 Python
【随手记】python语法:类属性和实例属性
【随手记】python语法:类属性和实例属性
20 1
|
4天前
|
C++ Python
Python的基本语法汇总
Python的基本语法汇总
11 1
|
4天前
|
存储 Python
Python基础第二篇(Python基础语法)
Python基础第二篇(Python基础语法)
|
5天前
|
存储 JavaScript 前端开发
Python Django下的实现注册验证码
摘要: 使用Python生成随机验证码图像,包括干扰线和噪点,保存到静态文件夹,并将验证码文本存储到数据库。数据库表包含ID、验证码图片路径和验证码文本。JavaScript函数`getRandomInt`生成1到300的随机数,用于请求对应数据库条目的验证码和图片。XMLHttpRequest发送POST请求到服务器,视图函数返回指定ID的验证码图片路径,实现验证码的动态刷新。
|
8天前
|
存储 IDE Linux
Python零基础入门-0 Python简介和开发环境PyCharm配置
Python零基础入门-0 Python简介和开发环境PyCharm配置
|
8天前
|
小程序 前端开发 JavaScript
计算机Python项目|django傣族节日及民间故事推广小程序
计算机Python项目|django傣族节日及民间故事推广小程序