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://www.mfbz.cn/a/395241.html

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

相关文章

idea快捷键使用

文章目录 快捷键的使用通用型编码源文件时快捷键使用操作文件类结构、查找和查看源码查找、替换与关闭调整格式Debug快捷键 查看快捷键已知快捷键操作名&#xff0c;未知快捷键已知快捷键&#xff0c;不知道对应的操作名自定义快捷键 切换其它平台快捷键 快捷键的使用 通用型 …

《白话C++》第10章 STL和boost,Page85 std::shared_ptr常用功能

std::shared_ptr基本用法包括&#xff1a; &#xff08;1&#xff09;取裸指针 //get()成员取回裸指针 std::shared_ptr <int> pa(new int(5)); int* p pa.get(); /**< 取回裸指针 */ &#xff08;2&#xff09;判断是否为空 肯定可以这样写&#xff1a; std::s…

MobaXterm下载安装及SSH远程教程

一、MobaXterm的简介 MobaXterm是一款功能强大的远程计算工具&#xff0c;集成了诸多网络工具和便利功能&#xff0c;包括SSH、X11服务器、SFTP等&#xff0c;支持Windows系统。用户可以使用MobaXterm来轻松管理远程服务器&#xff0c;进行文件传输&#xff0c;远程桌面显示等操…

8、内网安全-横向移动RDPKerberos攻击SPN扫描WinRMWinRS

用途&#xff1a;个人学习笔记&#xff0c;有所借鉴&#xff0c;欢迎指正 目录 一、域横向移动-RDP-明文&NTLM 1.探针服务&#xff1a; 2.探针连接&#xff1a; 3.连接执行&#xff1a; 二、域横向移动-WinRM&WinRS-明文&NTLM 1.探针可用&#xff1a; 2.连接…

语义相关性评估指标:召回率、准确率、Roc曲线、AUC;Spearman相关系数、NDCG、mAP。代码及计算示例。

常规的语义相关性评价可以从检索、排序两个方面进行。这里只贴代码。详细可见知乎https://zhuanlan.zhihu.com/p/682853171 检索 精确率 def pre(true_labels[],pre_labels[]):""":param true_labels: 正样本索引:param pre_labels: 召回样本索引:return: 精…

180144-70-1,6-罗丹明6G-NHS 活化酯,具有高荧光性质的罗丹明家族染料

216699-37-5&#xff0c;793646-39-6&#xff0c;180144-70-1&#xff0c;6-罗丹明6G-NHS 活化酯&#xff0c;6-Rhodamine 6G NHS ester&#xff0c;R6G SE,6-isomer&#xff0c;具有高荧光性质的罗丹明家族染料 您好&#xff0c;欢迎来到新研之家 文章关键词&#xff1a;216…

【存储基础学习笔记】

目录 第一章&#xff1a;存储基础知识第二章&#xff1a;存储的基本概念2.1存储是什么&#xff1f;2.2存储的应用场景2.3存储的硬件结构2.4存储的软件架构2.5存储设备的性能参数和计算方法 第三章&#xff1a;存储阵列关键技术3.1硬盘介绍3.2RAID技术3.3RAID2.0技术 第四章&…

Postgresql 怎么实现在局域网中访问

安装PostgreSQL后&#xff0c;默认情况下只能在本机进行连接访问&#xff0c;如果需要在其他主机上访问PostgreSQL数据库服务器&#xff0c;需要进行配置。 安装连接PostgresSQL数据库可以参考博文&#xff1a;安装连接PostgresSQL数据库教程 一. 整体步骤 主要包括下面几个步…

mmap映射文件使用示例

mmap 零拷贝技术可以应用于很多场景&#xff0c;其中一个典型的应用场景是网络文件传输。 假设我们需要将一个大文件传输到远程服务器上。在传统的方式下&#xff0c;我们可能需要将文件内容读入内存&#xff0c;然后再将数据从内存复制到网络协议栈中&#xff0c;最终发送到远…

Ubuntu系统搭建HadSky论坛并结合内网穿透实现无公网ip远程访问

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

x86下使用硬件实现的任务切换(TSS表)---使用代码讲解

实现任务切换(使用TSS) 视频讲解可以看这一个课程 • The current program, task, or procedure executes a JMP or CALL instruction to a TSS descriptor in the GDT. • The current program, task, or procedure executes a JMP or CALL instruction to a task-gate descri…

冒泡排序及其优化

冒泡排序 int[] arr {1,3,2,9,4,7,2,8};//比较多少轮(n个数字比较n-1次)for(int i0,n arr.length;i<n-1;i) {//每轮比较多少次(n-1-i次)for(int j 0;j<n-1-i;j) {//两两比较if(arr[j] > arr[j1]) { //比较结果为升序排列&#xff0c;如果想要降序排列结果将 >…

计算机网络——18无连接传输UDP

无连接传输UDP UDP “尽力而为的”服务&#xff0c;报文段可能 丢失送到应用进程的报文段乱序 无连接 UDP发送端和接收端之间没有握手每个UDP报文段都被独立的处理 UDP被用于 流媒体DNSSNMP 在UDP上实现可靠传输 在应用层增加可靠性应用特定的差错格式 UDP&#xff1a;用户…

小工具 - 浮点计算器

文章目录 小工具 - 浮点计算器概述笔记FloatCalcDlg.cppFloatCalcDlg.hrcEND 小工具 - 浮点计算器 概述 在学习CE, 在调试过程中, 经常要看内存中浮点对应的4字节内存到底对应的是啥具体的浮点值. e.g. 0x42860000 > 67.00 转换逻辑挺简单的 float CFloatCalcDlg::uint32…

克服数字化三重担忧,从构建身份基础设施开始

随着数字化转型和云迁移的逐步推进&#xff0c;IT 架构逐渐复杂化&#xff0c;基础设施和运营&#xff08;I&O&#xff09;领域已出现了许多创新和新兴技术&#xff0c;例如云计算、边缘计算、云原生、容器技术和智能运维&#xff08;AIOps&#xff09;。这些创新和新技术不…

TCP流量控制+拥塞控制

流量控制&#xff1a; 目标&#xff1a;流量控制主要解决的是发送方和接收方之间处理能力的不匹配问题。它的目的是确保发送方不会发送数据过快&#xff0c;以至于接收方无法及时接收并处理这些数据&#xff0c;从而避免数据包在网络中堆积和丢失。实现方式&#xff1a;在TCP协…

挑战杯 基于GRU的 电影评论情感分析 - python 深度学习 情感分类

文章目录 1 前言1.1 项目介绍 2 情感分类介绍3 数据集4 实现4.1 数据预处理4.2 构建网络4.3 训练模型4.4 模型评估4.5 模型预测 5 最后 1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 基于GRU的 电影评论情感分析 该项目较为新颖&#xff0c;适合作为竞…

Vue3快速上手(八) toRefs和toRef的用法

顾名思义&#xff0c;toRef 就是将其转换为ref的一种实现。详细请看&#xff1a; 一、toRef 1.1 示例 <script langts setup name"toRefsAndtoRef"> // 引入reactive,toRef import { reactive, toRef } from vue // reactive包裹的数据即为响应式对象 let p…

UE蓝图 Cast节点和源码

系列文章目录 UE蓝图 Cast节点和源码 文章目录 系列文章目录Cast节点功能一、Cast节点用法二、Cast节点使用场景三、Cast节点实现步骤四、Cast节点源码 Cast节点功能 在Unreal Engine&#xff08;UE&#xff09;中&#xff0c;Cast节点是一种蓝图系统中的节点&#xff0c;用于…

如何高效利用FMEA,FMEA实施流程有哪些——SunFMEA软件系统

FMEA作为是一种预防性的质量工具&#xff0c;用于识别、评估和解决潜在的设计和过程故障模式。通过FMEA的实施&#xff0c;可以在产品或过程的开发阶段发现并解决潜在问题&#xff0c;从而减少产品或过程的故障风险。如何高效利用FMEA呢&#xff0c;接下来SunFMEA软件和大家一起…
最新文章