django url解析中的ResolverMatch

了解这个问题,源于昨天开发时遇到的一个小小的问题。

问题描述如下:

比如,我有一个url,定义如下:

path('res_edit/<app>/<env>/', AppResEditView.as_view(), name='res_edit'),

那如果我现在拿到一个url是如下:

/res_edit/App_70/UAT/

那么,问题来了:

我如何通过django原生的途径,拿到app=App_70, env=UAT这样的变量?

============================================================

找了一些文档,最后,发现官网的还是最有效:

https://docs.djangoproject.com/en/2.1/ref/urlresolvers/

原来,resolve函数就可以返回一个三元组,而其中的字典,即我们需要的东东。如下:

func, args, kwargs = resolve(self.request.path)
app = kwargs['app']
env = kwargs['env']

 

官方说明如下:

resolve( pathurlconf=None) [source]

path is the URL path you want to resolve. As with reverse(), you don’t need to worry about the urlconf parameter. The function returns a ResolverMatchobject that allows you to access various metadata about the resolved URL.

If the URL does not resolve, the function raises a Resolver404 exception (a subclass of Http404) .

转载于:https://www.cnblogs.com/aguncn/p/10340522.html

Django中的URL解析是将URL映射到特定的视图函数或类的过程。URL解析器检查传入的URL并根据定义的规则将其映射到视图函数或类。这使得Django能够根据不同的URL调用不同的视图函数或类。 Django中的URL解析定义方法如下: 1. 在应用程序中创建urls.py文件:在应用程序的根目录中创建一个名为urls.py的文件。 2. 导入视图函数或类:在urls.py文件中导入视图函数或类,以便URL可以映射到它们。 3. 定义URL模式:使用Django内置的URL模式来定义URL模式。例如,以下是一个简单的URL模式: ``` from django.urls import path from . import views urlpatterns = [ path('hello/', views.hello, name='hello'), ] ``` 在这个例子中,我们定义了一个URL模式,将/hello/映射到名为“hello”的视图函数。 4. 匹配URL:当Django收到一个请求时,它会使用URL解析器来匹配请求的URLURL解析器会查找与请求URL匹配的URL模式,并调用与该模式相关联的视图函数或类。 5. 使用URL名称:可以为URL模式命名,并在代码中使用该名称来引用URL。这使得URL模式的更改更容易,并且可以在代码中重复使用。 ``` from django.urls import path from . import views urlpatterns = [ path('hello/', views.hello, name='hello'), path('goodbye/', views.goodbye, name='goodbye'), ] ``` 在这个例子中,我们定义了两个URL模式,并将它们命名为“hello”和“goodbye”。现在,可以在代码中使用这些名称来引用这些URL模式,例如: ``` from django.urls import reverse url = reverse('hello') ``` 这些是DjangoURL解析的基本定义方法。通过使用URL解析器,可以轻松地将URL映射到视图函数或类,并在Web应用程序中实现复杂的URL路由。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值