Django的路由

"本文详细介绍了Django项目中URL路由的配置,包括通过`path()`和`include()`进行路由指定与包含,以及如何解析路由参数。示例中展示了如何定义视图函数并使用`HttpResponse`返回响应。同时,讲解了如何使用正则表达式`re_path`进行复杂路由匹配,并演示了如何进行反向解析URL。此外,还提到了模板中使用`{% url %}
摘要由CSDN通过智能技术生成

路由

项目创建的时候有一个urls.py,这个是指定整个项目路由的入口,使用path指向对应的视图。

from django.contrib import admin
from django.urls import path
from app1 import views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('index/', views.index),
]

path(url正则表达式, 视图函数,别名)

路由匹配:调用path()函数匹配。如果匹配到直接返回不在往下匹配,如果匹配不成功返回404。

包含路由匹配

还可以包含路由的urls.py匹配,这样更加便于设计。
使用include包含子路由

项目的urls.py

from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('app1.urls'))
]

在对应创建的项目app1中新建urls.py 文件写入路由
应用的urls.py

from app1 import views
from django.urls import path, include

urlpatterns = [
    path('app1/test', views.test )
]

app1下的views.py

from django.shortcuts import render
from django.http import HttpResponse


# Create your views here.
def index(request):
    return render(request, 'app1/index.html')

def test(request):
    return HttpResponse("内部自己的url")

在这里插入图片描述

解析路由参数

app1中的urls.py

from app1 import views
from django.urls import path, include

urlpatterns = [
    path('app1/test', views.test ),
    path('app1/show/<int:id>', views.show )
]

views.py

def show(request, id):
    return HttpResponse("url带的参数,id的值是 " + str(id))

在这里插入图片描述
解析url中的参数,格式为

<参数数据类型:参数名称>

  • str 默认类型,字符串,不包含"/"
  • int 整型
  • slug ASCII类型、连字符和下划线
  • uuid uuid格式的字符串

re_path匹配复杂的正则路由

(?P <name > pattern)

正则表达式说明
.任意单个字符
\d匹配任意一个数字
\w字母数字下划线
*匹配0个或多个
[a-z]匹配a-z任意一个小写字母
{1, 5}匹配1-5个字符
re_path('app2/list(?P<year>\d{4})/', view.list),
re_path('app2/list(?P<page>\d+)&key=(?<key>\w+)/', view.list)

如上所示,第一个匹配后面跟四位整数,第二个匹配第一个参数后面跟任意整数,第二个参数任意字符。

反向解析

urls.py中name的属性可以反向解析出路由地址。
应用中urls.py

path('app1/reverse/', views.url_reverse, name="app1_url_reverse")

views.py

from django.shortcuts import render, reverse
from django.http import HttpResponse

def url_reverse(request):
    print("解析结果为:" + reverse("app1_url_reverse"))
    return render(request, "app1/url_reverse.html")

在对应目录中添加模板

<div>
  在html中反向解析<br />
  {% url 'app1_url_reverse' %}
</div>

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我的天才女友

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值