Django 的逆向解析url(转)

首先新建一个项目test_url,项目包含一个名为app01的应用

urls.py文件中生成如下内容

from django.conf.urls import url
    from django.shortcuts import HttpResponse
    
    def index(request):
    
        return HttpResponse("index")
    
    def test(request):
    
        return HttpResponse("test")
    
    urlpatterns = [
        url(r'^index',index),
        url(r'^test',test),
    ]

启动项目,用浏览器打开http://127.0.0.1:8000/testhttp://127.0.0.1:8000/index/
页面如下

Django 的逆向解析url(转)_第1张图片
image.png

Django 的逆向解析url(转)_第2张图片
image.png

上面的例子是正向生成url,既然Django可以正向生成url,当然也可以反向生成url

无参数反向生成url

修改urls.py文件

  from django.conf.urls import url
    from django.shortcuts import HttpResponse,redirect
    
    def index(request):
    
        from django.urls import reverse         # 导入reverse
    
        reverse_url=reverse("test_url")         # 用reverse把别名为test_url的路由反向生成url    
        print("reverse_url:",reverse_url)       # 打印反向生成的url
    
        return redirect(reverse_url)            # 重定向到反向生成的url
    
    def test(request):
    
        return HttpResponse("test")
    
    urlpatterns = [
        url(r'^index',index),
        url(r'^test1/test2/test3/test',test,name="test_url"),   # 为test路由设置一个test_url别名
    ]

用浏览器打开http://127.0.0.1:8000/index,然后回车

Django 的逆向解析url(转)_第3张图片
image.png

而服务端打印的反向生成的utl如下
Django 的逆向解析url(转)_第4张图片
image.png

可以看到,浏览器的地址栏里显示的url跟我们输入的地址不一样,而是跟Django的路由表中设置了路由别名的url是一样的.

从上面的例子可以看出,反向生成url已经成功了.

有参数的反向生成url

使用正则表达式通过args传入参数反向生成url

修改urls.py文件

 from django.conf.urls import url
    from django.shortcuts import HttpResponse,redirect
    
    def index(request):
    
        from django.urls import reverse
    
        reverse_url=reverse("test_url",args=(2,8))
        print("reverse_url:",reverse_url)
    
        return redirect(reverse_url)
    
    def test(request,*args,**kwargs):
    
        return HttpResponse("test")
    
    urlpatterns = [
        url(r'^index',index),
        url(r'^test1/(\d+)/test2/test3/(\d+)/test',test,name="test_url"),
    ]

浏览器打开http://127.0.0.1:8000/index这个地址
浏览器的地址变成了

Django 的逆向解析url(转)_第5张图片
image.png

而在服务端后台打印反向生成的url为
Django 的逆向解析url(转)_第6张图片
image.png

使用正则表达式通过kwargs传入参数反向生成url

修改urls.py文件

from django.conf.urls import url
    from django.shortcuts import HttpResponse,redirect
    
    def index(request):
    
        from django.urls import reverse
    
        reverse_url=reverse("test_url",kwargs={"a1":23,"a2":37})
        print("reverse_url:",reverse_url)
    
        return redirect(reverse_url)
    
    def test(request,*args,**kwargs):
    
        return HttpResponse("test")
    
    urlpatterns = [
        url(r'^index',index),
        url(r'^test1/(?P\d+)/test2/test3/(?P\d+)/test',test,name="test_url"),
    ]

浏览器打开http://127.0.0.1:8000/index这个个地址

Django 的逆向解析url(转)_第7张图片
image.png

后台打印反向生成的url
Django 的逆向解析url(转)_第8张图片
image.png

在前端中也可以使用反向url

{% url "test" 2013 12%}
{% url "test" year=2013 month=12%}

你可能感兴趣的:(Django 的逆向解析url(转))