django-url反向解析

警告
本文最后更新于 2020-10-10 14:02,文中内容可能已过时。

app_name和namespace介绍https://www.liujiangblog.com/course/django/136

1.配置根url

1
2
3
4
5
6
# 指定包含的url为tpl.urls,app_name为tpl,命名空间为"tpl"
path('', include(('tpl.urls', 'tpl'), namespace="tpl"))

# 另外一种写法
# 没有指定app_name,需要到App.urls文件中添加app_name = 'App'
path('', include('App.urls', namespace="App")),

获取当前的app_name和namespace request.resolver_match

2.配置具体url的name

1
2
3
4
5
6
7
8
urlpatterns = [
    path('login/', views.login, name="login"),
    path('reverse_url/', views.reverse_url, name="reverse_url"),
    path('reverse_test/', views.reverse_test, name="reverse_test"),

    re_path(r'(.*?)/(.*?)/', views.url1, name="url1"),
    re_path(r'(?P<arg1>.*?)/(?P<arg2>.*?)/', views.url1, name="url2"),
]

2.模板语法

写死的

1
<a href="/login/">普通url,写死</a>

模板语法

1
2
<!-- tpl是namespace,login是url的名称,上面name定义的 -->
<a href="{%url 'tpl:login' %}">根据namespace获取</a>

带参数的

1
2
3
4
5
# 位置参数
<a href="{%url 'tpl:login' '参数1' '参数2' %}">根据namespace获取</a>

# 命名参数
<a href="{%url 'tpl:url2' arg1='soulchild' arg2=12 %}">根据namespace获取的,命名参数url: {%url 'tpl:url2' arg1='soulchild' arg2=12 %}</a>

3.python中reverse反向获取url

不带参数

1
2
3
def reverse_test(request):
    print(reverse("tpl:login"))
    return HttpResponse("python reverse")

位置参数

1
2
3
def reverse_test(request):
    print(reverse("tpl:url1", args=('arg1', 'arg2')))
    return HttpResponse("python reverse")

命名参数

1
2
3
def reverse_test(request):
    print(reverse("tpl:url2", kwargs={'arg1': '1', 'arg2': '2'}))
    return HttpResponse("python reverse")
请我喝杯水
SoulChild 微信号 微信号
SoulChild 微信打赏 微信打赏
0%