Python Django路由详解

1.路由Router

在实际开发过程中,一个Django 项目会包含很多的 app,这时候如果我们只在主路由里进行配置就会显得杂乱无章,所以通常会在每个app 里,创建各自的 urls.py 路由模块,然后从根路由出发,将 app 所属的 url 请求,全部转发到相应的 urls.py 模块中。而这个从主路由转发到各个应用路由的过程叫做路由的分发。

路由匹配

# 使用ur1给视图函数传参数
path('index/',index)
path('detail/<int:id>/", detail)
# 给ur1取别名,那么在使用此ur1的地方可以使用别名。比如:
path('index/',index, name='index')
path('detail/<int:id>/", detail, name='detail')

命名空间

在实际应用中,Django中可能存在多个应用程序,每个应用程序都可能有自己的路由模块。为了防止路由冲突,Django提供了命名空间(namespace)的概念。命名空间是一种将路由命名为层次结构的方式,使得在查询路由时可以限定在该命名空间内 

一定要传入元组 

# 在根路由中可以设置命名空间
path('app/",include((App,urls',"App"),namespace='App'))

 路由跳转

在模版html文档中可通过2种方式实现路由跳转

  • url路由匹配方式是一层一层匹配对应的路由
  • 反向解析方式是先找到html文档,然后通过名称找到对应的路由。因此,这就有一个问题了,不同APP路由同名怎么办?这就是命名空间的作用了。

需要注意的是,写了命名空间,在视图函数和html文档中都要使用命名空间,没有使用命名空间则都不能使用

路由传参:加入参数类型与名称

在html文档中写入,注意user需要在渲染函数中传入

多个参数,要和参数名一致,类似于关键字传参

 反向解析与重定向

Django路由反向解析是一个非常重要的功能,它可以让我们在代码中使用路由别名替代URL路径,在修改URL时避免代码中的硬编码依赖,同时也可以提高可读性和可维护性。 

#在视图函数中,反向解析ur1:
from django.shortcuts import render, redirect, reverse
def buy(request):
return redirect(reverse("index'))
return redirect(reverse('deta11",args=[2]))
return redirect(reverse("deta11",kwargs=("1d": 2)))
# 在templates中,使用别名:
(% url 'detail' stu,id %)

重定向 

2.Django模版

在Django框架中,模板是可以帮助开发者快速生成量现给用户页面的工具
模板的设计方式实现了我们MVT中VT的解(M: Model,V:View,T:Template),VT有着N:M的关系,一个V可以调用任意T,一个T可以供任意V使用 MVC

模板处理分为两个过程

        加载HTML

        渲染数据
模板主要有两个部分
·        HTML静态代码
        模板语言,动态插入的代码段(挖坑,填坑)
模板中的动态代码段除了做基本的静态填充,还可以实现一些基本的运算,转换和逻辑
        静态页面:页面数据是本地固定的
        动态页面:页面数据来源于后台服务器
模板中的变量:视图传递给模板的数据,遵守标识符规则
        语法: (( var ]}
        如果变量不存在,则插入空字符串 

方法不能有参数
        {{str }}
        {{ str.upper }}
        {{ str,isdigit}}
        {{ dict.key}}
列表,使用索引,不允许负索引
        items= ['apples" 'bananas", 'carrots']
        {( items.2 })

模板中的标签
语法{% tag %)
作用
        1.加载外部传入的变量
        2.在输出中创建文本
        3,控制循环或逻辑

变量

在模版中,列表需要以.1的形式书写(字典以.key的形式书写)

标签

标签都要使用{%  %}表示 

if 语句:
        格式
        if单分支
                {% if 表达式 %}
                        语句
                {% endif %}
if双分支
                {%if 表达式 %)
                        语句
                {% else %}
                        语句
                {% endif %}
if多分支
                {% f 表达式 %}
                        语句
                {% elif 表达式 %}
                        语句
                {% else %}
                        语句

                 {% endif %}

注意变量和符号一定要加空格 

判断true或false
        {% if today_is_weekend %}
        <p>Welcome to the weekend!</p>
          {% endif %}
使用 and or not
        {%if athlete_list and coach_list %}
        <p>Both athletes and coaches are available.</p)
       {% endif %}
        {% if not athlete_list %}
        <p>There are no athletes.</p>
        {% endif %}
        {% if athlete list or coach list %}
        <p>There are some athletes or some coaches.</p>
         {% endif %}

 使用 in和noqin,
        {% if"bc" in "abcdef" %}
        This appears since "bc" is a substring of "abcdef"
         {% endif %}
        {% if user not in users %}
        If users is a list, this will appear if user isn't an element of the list. 

        {% endif %}

for 语句:
        {% for 变量 in 列表%}
        语1
        {% empty %}
        语2
        {% endfor %}
当列表为空或不存在时,执行empty之后的语句

forloop有很多属性,可以对下标进行操作 

循环嵌套

过滤器

格式为|操作:(操作数)的形式

过滤器可以传递参数,参数需要使用引号引起来比如join:{{ studentsljoin:'=' })
默认值:default,格式 {{varldefault:value}}
如果变量没有被提供或者为False,空,会使用默认值
根据指定格式转换日期为字符串,处理时间的就是针对date进行的转换
{[ dateVal l date:'y-m-d' }}

HTML转义
        将接收到的数据当成普通字符串处理还是当成HTML代码来渲染的一个问题
        渲染成html:
        {{codelsafe }}
打开自动转义转义、关闭自动转义
        {% autoescape off%}
                code
        {% endautoescape %}

模板继承


        block:
        {% block xxx%}
                code
        {% endblock %}
extends 继承,写在开头位置
        {% extends “父模板路径”}
include:加载模板进行渲染
        {% include ‘模板文件’%}
{{ block.super }}: 获取父模板中blocke的内容

父模版内容 

继承父模版 

默认情况下,子模板会覆盖义模板的内容 #
# 如果想将文模板中bLock的内容继承,则需要使用block.super #}

在Django项目中使用Jinja2模板引擎


Jinja2是Flask框架讲过的一个模板引擎,是模仿Django默认模板引擎基础上开发的,比Django模板引擎性能更好,功能更全。jinja2宣称比django默认模板引擎快10-20倍。Django也支持jinja2

1.安装jinja2模块
pip install jinja2

⒉.在settings.py所在目录中创建jinja2_env.py文件,并写入以下内容

from django.templatetags.static irport static
from django.urls irport reverse
from jinjo2 impcrt Envircnment
def environment(**cptions):env = Ervircnment(**options)env .globals.update({' static' : static,"url' : revcrsc,})return env

修改setting中的template

 

pycharm设置为jinja2

 

注意:使用jinjia2模板语法大多数与django相同,但是有一些区别:例如:

1.jinjia2中不能使用forloop,能够使用loop.

 

2.jinjia能支持有参数的函数调用,而django不支持。

 

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

C# OpenVino Yolov8 Pose

目录 效果 模型信息 项目 代码 下载 效果 模型信息 Model Properties ------------------------- date&#xff1a;2023-09-07T17:11:43.091306 description&#xff1a;Ultralytics YOLOv8n-pose model trained on /usr/src/app/ultralytics/datasets/coco-pose.yaml a…

【Make编译控制 06】CMake初步使用

目录 一、概述与安装 二、编译源文件 三、无关文件管理 一、概述与安装 CMake是一个跨平台的项目构建工具&#xff0c;相比于Makefile&#xff0c;CMake更加高级&#xff0c;因为CMake代码在执行的时候是会先翻译生成Makefile文件&#xff0c;再调用Makefile文件完成项目构…

Camunda如何发送邮件及委托代码讲解

&#x1f496;专栏简介 ✔️本专栏将从Camunda(卡蒙达) 7中的关键概念到实现中国式工作流相关功能。 ✔️文章中只包含演示核心代码及测试数据&#xff0c;完整代码可查看作者的开源项目snail-camunda ✔️请给snail-camunda 点颗星吧&#x1f618; &#x1f496;什么是委托…

力扣 第 383 场周赛 解题报告 | KMP

力扣 第 383 场周赛 解题报告 | KMP 链接 前言 一个人能走的多远不在于他在顺境时能走的多快&#xff0c;而在于他在逆境时多久能找到曾经的自己。 T1 修改矩阵 思路&#xff1a;模拟 时间复杂度&#xff1a; O ( m n ) O(mn) O(mn) class Solution:def modifiedMatrix(se…

二、Mybatis相关概念

1.对象/关系数据库映射&#xff08;ORM) ORM全称Object/Relation Mapping&#xff1a;表示对象-关系映射的缩写ORM完成面向对象的编程语言到关系数据库的映射。当ORM框架完成映射后&#xff0c;程序员既可以利用面向对象程序设计语言的简单易用性&#xff0c;又可以利用关系数…

leetcode:131.分割回文串

树形结构&#xff1a; 切割到字符串的尾部&#xff0c;就是叶子节点。 回溯算法三部曲&#xff1a; 1.递归的参数和返回值&#xff1a; 参数字符串s和startIndex切割线 2.确定终止条件&#xff1a; 当分割线到字符串末尾时到叶子节点&#xff0c;一种方案出现 3.单层搜索…

290. Word Pattern(单词规律)

题目描述 给定一种规律 pattern 和一个字符串 s &#xff0c;判断 s 是否遵循相同的规律。 这里的 遵循 指完全匹配&#xff0c;例如&#xff0c; pattern 里的每个字母和字符串 s 中的每个非空单词之间存在着双向连接的对应规律。 提示: 1 < pattern.length < 300 pa…

036 冒泡排序

代码实践 // 冒泡排序 static void bubbleSort(Comparable[] elements) {// 临时容器&#xff0c;用于变量交换值时存储Object temp;// 标志位 用于减少无意义的循环次数boolean flag;for (int i 0; i < elements.length - 1; i) {flag false;for (int j 0; j < elem…

读取csv数据并转为二维数组

首先我csv文件中数据如上&#xff0c;是个25*4的数据。 现在需要读取&#xff0c;并将其转化为二维数组&#xff0c;方便后续操作。 import csv with open(q_table.csv, r) as file:csv_reader csv.reader(file)data_array []for row in csv_reader:data_array.append(row)…

【Effective Objective - C 2.0】——读书笔记(二)

文章目录 前言六、理解“属性”这一概念七、在对象内部尽量直接访问实例变量八、理解“对象等同性”这一概念九、以“类族模式”隐藏实现细节十、在既有类中使用关联对象存放自定义数据十一、理解objc_msgSend的作用十二、理解消息转发机制动态方法解析备援接受者完整的消息转发…

ElasticSearch快速开始

目录 全文检索 全文检索的原理 什么是倒排索引 ElasticSearch介绍 ElasticSearch应用场景 ElasticSearch下载安装&#xff08;windows&#xff09; 客户端Kibana安装 Elasticsearch安装分词插件 ElasticSearch快速开始 ElasticSearch索引操作 创建索引 查询索引 删…

模拟串口LV2,解决硬件串口资源不足问题!!!!

模拟串口通信 2.0 版本&#xff01;&#xff01; 我在前面的文章里面有写了 虚拟串口通信&#xff0c;虽然说能用&#xff0c;但是用过的小伙伴都说 “好!” 优缺点: 先说一点&#xff0c;2.0版本并不适用于同硬件串口的所有场合&#xff0c;仅仅针对自己开发的电子垃圾的主…

中年低端中产程序员从西安出发到海南三亚低成本吃喝万里行:西安-南宁-湛江-雷州-徐闻-博鳌-陵水-三亚-重庆-西安

文章大纲 旅途规划来回行程的确定南宁 - 北海 - 湛江轮渡成为了最终最大的不确定性&#xff01;感谢神州租车气温与游玩地点总体花费 游玩过程出发时间&#xff1a;Day1-1月25日星期四&#xff0c;西安飞南宁路途中&#xff1a;Day2-1月26日星期五&#xff0c;南宁-湛江-住雷州…

python coding with ChatGPT 打卡第19天| 二叉树:合并二叉树

相关推荐 python coding with ChatGPT 打卡第12天| 二叉树&#xff1a;理论基础 python coding with ChatGPT 打卡第13天| 二叉树的深度优先遍历 python coding with ChatGPT 打卡第14天| 二叉树的广度优先遍历 python coding with ChatGPT 打卡第15天| 二叉树&#xff1a;翻转…

【C语言——打印乘法口诀表】

乘法表&#xff1a; 我们可以定义一个i控制行的变化&#xff0c;外加看上图的表得知我们需要用到循环结构&#xff0c;i是行需要不停的加加&#xff0c;因此&#xff0c;for循环比较好用&#xff0c;可以用两个嵌套的循环&#xff0c;外层循环即用到的i表示的是每一行的打印&am…

阿里云游戏服务器多少钱一年?

阿里云游戏服务器租用价格表&#xff1a;4核16G服务器26元1个月、146元半年&#xff0c;游戏专业服务器8核32G配置90元一个月、271元3个月&#xff0c;阿里云服务器网aliyunfuwuqi.com分享阿里云游戏专用服务器详细配置和精准报价&#xff1a; 阿里云游戏服务器租用价格表 阿…

《计算思维导论》笔记:10.4 关系模型-关系运算

《大学计算机—计算思维导论》&#xff08;战德臣 哈尔滨工业大学&#xff09; 《10.4 关系模型-关系运算》 一、引言 本章介绍数据库的基本数据模型&#xff1a;关系模型-关系运算。 二、什么是关系运算 在数据库理论中&#xff0c;关系运算&#xff08;Relational Operatio…

PKI - 借助Nginx 实现Https_使用CA签发证书

文章目录 Pre概述操作步骤1. 生成 CA 密钥对2. 生成自签名的 CA 证书3. 生成服务器密钥对和证书签名请求 (CSR)4. 使用 CA 签署服务器证书 Nginx Https 自签证书1. 生成自签名证书和私钥2. 配置 Nginx 使用 CA签发的 HTTPS 证书3. 重启 Nginx 服务4. 直接访问5. 不验证证书直接…

代码随想录算法训练营day15||二叉树part02、102.二叉树的层序遍历、 226.翻转二叉树(优先掌握递归)、101. 对称二叉树 (优先掌握递归)

102.二叉树的层序遍历 题目&#xff1a;给你一个二叉树&#xff0c;请你返回其按 层序遍历 得到的节点值。 &#xff08;即逐层地&#xff0c;从左到右访问所有节点&#xff09;。 接下来我们再来介绍二叉树的另一种遍历方式&#xff1a;层序遍历。 层序遍历一个二叉树。就是…

Centos7之忘记Root用户密码的处理方式

Centos7之忘记Root用户密码的处理方式 文章目录 Centos7之忘记Root用户密码的处理方式1.场景描述2. 重置密码1. 重启系统进入编辑界面2. 按方向键下键↓&#xff0c;找到设置语言的地方3. 进入bash界面后&#xff0c;可以输入passwd命令重新设置root密码 1.场景描述 长时间未使…