代码中url出现的位置
1,模板【html中】
1,<a href='url'>超链接</a> 击后页面跳转至 url
2,<form action='url' method='post'> form表单中的数据用post方法提交至url
2,视图函数中-302跳转 HttpResponseRedirect('url') 将用户地址栏中的地址跳转到url
代码中url书写规范
1,绝对地址
http://128.9.9.1:8000/page/1
2,相对地址
1,'/page/1' - '/' 开头的相对地址 ,浏览器会把当前地址栏里的协议,ip和端口加上这个地址,作为最终访问地址,即如果当前页面地址栏为http://127.0.0.1:8000/page/3;当前相对地址最终结果为http://127.0.0.1:8000 + /page/1
2,'page/1' - 没有 '/' 开头的相对地址,浏览器会根据当前url 的最后一个 / 之前的内容加上该相对地址作为最终访问地址,例如当前地址栏地址为http://127.0.0.1:8000/topic/detail; 则该相对地址最终结果为http://127.0.0.1:8000/topic/ + page/1
url反向解析
url反向解析是指在视图或模板中,用 path 定义的名称来动态查找或计算出相应的路由
path函数的语法
- path(route,views,name="别名")
- path('page',views.page_views,name="page_url")
根据path中的'name='关键字传参给url确定了个唯一确定的名字,在模板或视图中,可以通过这个名字反向推断出该url的信息
模板中 - 通过url标签实现地址的反向解析
- {% url '别名' %}
- {% url '别名' '参数值1' '参数值2' %}
示例代码
路由
urlpatterns = [
path('home/',views.home_view),
path('test/',views.test_html,name='t')
]
视图
def test_html(request):
return render(request, 'test_html.html')
def home_view(request):
return render(request, 'home.html')
模板(home.html)
<body>
<h3>这是主页</h3>
<a href="{% url 't' %}">跳转到测试页面</a>
</body>
模板(test_html.html)
<body>
<h3>这是个测试页面</h3>
</body>
运行
视图函数中 - 通过调用reverse方法反向解析
from django.urls import reverse
reverse('别名' , args=[], kwargs={})
示例代码
路由
urlpatterns = [
path('myapp/<int:id>/', views.my_view, name='my_view'),
]
视图
from django.urls import reverse
from django.http import HttpResponseRedirect
def my_view(request, id):
url = reverse('my_view', args=[id])
return HttpResponseRedirect(url)