路由的name和namespace(命名空间)(个人记录)

路由的name和namespace(命名空间)

name

作用:给一个路由起个名字 + 根据名字反向生成URL。

urlpatterns = [
    path('login/', views.login),
    path('auth/', views.auth),
]
# 很多功能,很多URL
urlpatterns = [
    path('login/', views.login, name="v1"),
    path('auth/', views.auth, name="v2"),
]

反向生成

在视图函数中生成URL,进行跳转
from django.urls import reverse

url1 = reverse("v1")   # /login/
url2 = reverse("v2")   # /auth/

from django.shortcuts import redirect
return redirect("/login/") # 上下等同
return redirect(url1)
HTML模板,页面上有一个a标签,添加xx。
<a href="/xxx/xxx/xx/">添加</a>
<a href="{% url 'v1' %}">添加</a>
<a href="{% url 'v2' %}">添加</a>

正则路由反向生成:

有组名:
urlpatterns = [
    path('login/<str:role>/', view.login, name="v1"),
    re_path(r'xxxx/(?P<nid>\d+)/(?P<tpl>\w+)/', views.auth, name="v3"),
]
from django.urls import reverse
url1 = reverse("v1", kwargs={"role": "hhh"})
url3 = reverse("v3", kwargs={"nid": "666", "tpl": "ddd"})   
<a href="{% url 'v1' role='hhh' %}"></a>
<a href="{% url 'v3' nid=666 tpl='ddd' %}"></a>
没有组名:
urlpatterns = [
    re_path(r'auth/(\d+)/(\w+)/', views.auth, name="v2"),
]
from django.urls import reverse
url2 = reverse("v2", args=(666, "ppp"))   
<a href="{% url 'v2' 666 'ppp' %}"></a>

namespace(命名空间)

作用 :辅助name。

主路由作路由分发

  • ./urls.py

    from django.urls import path, re_path, include
    
    # 很多功能,很多URL
    urlpatterns = [
        path('api/', include("apps.api.urls",namespace='x1')),
        path('web/', include("apps.web.urls",namespace='x2')),
    ]
    
  • api/urls.py

    from django.urls import path, re_path
    from . import views
    # 很多功能,很多URL
    urlpatterns = [
        path('login/', views.login,name="login"),
        path('auth/', views.auth, name='auth'),
    ]
    
  • web/urls.py

    from django.urls import path, re_path
    from . import views
    # 很多功能,很多URL
    urlpatterns = [
        path('home/', views.home,name='home'),
        path('order/', views.order,name='order'),
        path('auth/', views.order, name='auth'),
    ]
    

反向生成:

from django.urls import reverse
url = reverse("x1:login")    # /api/login/
url = reverse("x2:order")    # /web/order/

url = reverse("x1:auth")    # /api/auth/
url = reverse("x2:auth")    # /web/auth/

app_name

  • namespace需要设置app_name(高版本)

    urlpatterns = [
        path('api/', include("apps.api.urls", namespace='x1')),
    ]
    
    from django.urls import path
    from apps.api import views
    
    # 很多功能,很多URL
    urlpatterns = [
        path('login/', views.login, name="login"),
        path('auth/', views.auth, name='auth'),
    ]
    
    app_name = "api"
    

多层分发

手动分发

urlpatterns = [
    path('api/', ([
		path('login/', views.login, name="login"),
    	path('user/', views.user, name='user'),
    ], "api", "api")),
]

多层分发

urlpatterns=[
    path('api/',([
        		path('login/,'view.login,name="login"),
        		path('user/,'([
								path('list/',view.list,name=list) 
        		],'user','user')),
    		],'api','api'))
]

# /api/user/list/    ==>   x1:yy:xx

获取当前匹配对象的name和namespace

可以获取当前要访问的url_name、app_name、namespace

request.resolver_match

返回值

ResolverMatch(func=web.views.account.login, args=(), kwargs={}, url_name=login, app_names=[], namespaces=[], route=login/)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值