day18-Django路由对应的名称

一、前言

  之前我们只是对路由的匹配规则做了一些理解,今天我们就来说说,给路由启用一个名字,那个这个名字的用途是什么呐?今天我们就来看看,这个name 的作用。就是对路由关系进行命令,以后可以根据此名称生成自己想要的URL。

二、Django路由对应的名称

2.1、普通的路由对应的名称

在urls.py代码如下:

from django.urls import path,re_path
from app01 import views

urlpatterns = [
    re_path('^index/',views.index,name='index_qigao'),
]

 在templats中的代码如下:

<body>
    <form action="{% url 'index_qigao' %}" method="post">
        <p><input type="text" name="user" placeholder="用户名"></p>
        <p><input type="text" name="email" placeholder="邮箱"></p>
        <input type="submit" value="提交">
    </form>
</body>

2.2、传入顺序参数对应的路由名称

在urls.py代码如下:

from django.urls import path,re_path
from app01 import views

urlpatterns = [
    re_path('^index/(\d+)/',views.index,name='index_qigao'), #传入顺序参数
]

views.py需要接收这个参数,代码如下:

def index(request,nid):
    return render(request,"index.html",{'user_dict':USER_DICT})

 在templats中的代码如下:

<body>
    <form action="{% url 'index_qigao' 2 %}" method="post">  #这个2是你需要指定的参数,随便写,你想指定哪个就是哪个
        <p><input type="text" name="user" placeholder="用户名"></p>
        <p><input type="text" name="email" placeholder="邮箱"></p>
        <input type="submit" value="提交">
    </form>
</body>

2.3、传入关键字参数对应的路由名称

在urls.py代码如下:

from django.urls import path,re_path
from app01 import views

urlpatterns = [
    re_path('^index/(?P<nid>\d+)/(?P<uid>\d+)/',views.index,name='index_qigao'),  #关键字传入参数
]

view.py的代码如下:

def index(request,nid,uid):  #这边也可以用**kwargs来接收
    return render(request,"index.html",{'user_dict':USER_DICT})

 在templats中的代码如下:

<body>
    <form action="{% url 'index_qigao' nid=1 uid=3 %}" method="post">  #这边可用关键字参数直接赋值
        <p><input type="text" name="user" placeholder="用户名"></p>
        <p><input type="text" name="email" placeholder="邮箱"></p>
        <input type="submit" value="提交">
    </form>
</body>

三、获取当前URL

3.1、获取当前URL

说明:我们用request.path_info 来回去当前url

view.py的代码如下:

def index(request,nid,uid):
    print(request.path_info)  #获取当前的url
    return render(request,"index.html",{'user_dict':USER_DICT})

#输出
/index/1/3/

 在templats中的代码如下:

<body>
    <form action="{{ request.path_info }}" method="post">  #直接在模板语言里面传入{{ request.path_info }}
        <p><input type="text" name="user" placeholder="用户名"></p>
        <p><input type="text" name="email" placeholder="邮箱"></p>
        <input type="submit" value="提交">
    </form>
</body>

四、反转生成URL

4.1、正常反转生成URL

说明:根据urls中的name反转生成一个url

urls.py代码如下:

from django.urls import path,re_path
from app01 import views

urlpatterns = [
    re_path('^index/',views.index,name='index_qigao'), #根据name反转生成当前的url
]

views.py的代码如下:

def index(request):
    # index_qigao
    from django.urls import reverse #导入reverse 模块
    index_url = reverse('index_qigao')
    print(index_url)
    return render(request,"index.html",{'user_dict':USER_DICT})

#输出
/index/

4.2、传入顺序参数

说明:根据顺序传入参数

urls.py的代码如下:

from django.urls import path,re_path
from app01 import views

urlpatterns = [
    re_path('^index/(\d+)/(\d+)/',views.index,name='index_qigao'),
]

view.py的代码如下:

def index(request,nid,uid):
    # index_qigao
    from django.urls import reverse
    index_url = reverse('index_qigao',args=(nid,uid,))  #这边需要传入参数,后面必须有逗号
    print(index_url)
    return render(request,"index.html",{'user_dict':USER_DICT})


#输出
/index/nid/uid/

4.3、传入关键字参数

urls.py的代码如下:

from django.urls import path,re_path
from app01 import views

urlpatterns = [
    re_path('^index/(?P<nid>\d+)/(?P<uid>\d+)/',views.index,name='index_qigao'),
]

 view.py的代码如下:

def index(request,nid,uid):
    # index_qigao
    from django.urls import reverse
    index_url = reverse('index_qigao',kwargs=('nid':nid,'uid':uid,))  #用kwargs接收关键字参数
    print(index_url)
    return render(request,"index.html",{'user_dict':USER_DICT})

五、总结

   1、re_path('^index/',views.index,name='i1'),re_path('^index/(\d+)/(\d+)',views.index,name='i2'),re_path('^index/(?P<nid>\d+)/(?P<uid>\d+)/',views.index,name='i3'),

   2、def func(request,*args,**kwargs):

      from django.urls import reverse

      url1 = reverse('i1')

      url2 = reverse('i2',args=(1,2,))

      urls = reverse('i3',kwargs={'pid':1,'nid':9})

  3、xxx.html

     {% url  'i1' %} 

     {% url 'i2' 1 2 %}

     {% url 'i3' oid=1 nid=9  %}

  4、第2种和第3种方式,可以指定到某个页面中去,但是如果你只需要登录之后还是停留在原来的页面用request.path_info这个功能。

posted @ 2018-03-07 16:58  帅丶高高  阅读(191)  评论(0编辑  收藏  举报