Django-08 url反向解析
2021-07-11 本文已影响0人
JuliusL
代码中url出现的位置
- 模板【html中】
- <a href='url'>超链接</a>
点击后 页面跳转至url - <form action='url' method='post'>
form表单中的数据,用post方法提交至url
- <a href='url'>超链接</a>
- 视图函数中 - 302跳转 HttpResponseRedirect('url')
将用户地址栏的地址跳转到url
代码中url书写规范
- 绝对地址
http://127.0.0.1:8000/page/1 - 相对地址
- '/page/1' - '/' 开头的相对地址,浏览器会把当前地址栏里的协议,ip和端口加上这个地址,作为最终可访问地址,即如果当前页面为http://127.0.0.1:8000/page/3;当前相对地址最终结果为http://127.0.0.1:8000 + /page/1
- 'page/1' - 没有 '/' 开头的相对地址,浏览器会根据当前url的最后一个 / 之前的内容加上该相对地址作为最终访问地址,例如当前地址栏地址为http://127.0.0.1:8000/topic/detail;则该相对地址最终为http://127.0.0.1:8000/topic + page/1
测试用例:
def test_url(request):
return render(request,'test_url.html')
def test_url_result(request):
return HttpResponse('test url is ok')
<body>
<a href='http://127.0.0.1:8000/test_url_result'>绝对地址</a>
<a href='/test_url_result'>带'/'的相对地址</a>
<a href='test_url_result'>不带'/'的相对地址</a>
</body>
url反向解析
url反向解析是指在视图或模板中,用path定义的名称来动态查找或计算出相应的路由
path函数的语法
- path(route,views,name='别名')
- path('page',views.page_view,name='page_url')
根据path中的'name='关键字传递给url确定了个唯一确定的名字,在模板或视图中,可以通过这个名字反推出此url信息
模板中-通过url标签实现地址的反向解析
{% url '别名' %}
{% url '别名' ‘参数1’ ‘参数2’ %}
ex:
{% url 'pagen' '400' %}
{% url 'person' age='18' name='gxn' %}
urls.py
path('test_url_result/<int:age>',views.test_url_result,name = 'tr'),
在视图函数中 -> 可调用django中的reverse方法进行反向解析
from django.urls import reverse
reverse('别名',args=[],kwargs={})
ex:
print(reverse('pagen',args=[300]))
print(reverse('person',kwargs={'name':'xixi','age':18}))
def test_url_result(request,age):
from django.urls import reverse
url = reverse('base_index')
return HttpResponseRedirect(url)