一、前言
之前我们只是对路由的匹配规则做了一些理解,今天我们就来说说,给路由启用一个名字,那个这个名字的用途是什么呐?今天我们就来看看,这个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这个功能。