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这个功能。