URL 反向解析
2018-10-16 本文已影响0人
叶田的学习笔记
URL正向解析:
有客户端的浏览器发起一个url请求,Django根据URL解析,把url中的参数捕获,调用相应的试图,获取相应的数据,然后返回给客户端显示。
根据用户/浏览器发起的URL请求,它调用正确的Django视图,并从URL中提取它的参数需要的值。
URL反向解析:
通过一个视图的名字,再加上一些参数和值,逆向获取相应的URL。
根据Django视图中的标识和将要传递给它的参数的值,获取与之关联的URL。
Django提供了不同的层级的url逆向处理工具:
1、在模板templates中,使用url标记,如:{% url %}
2、在Python代码中,使用django.urls.reverse()方法
3、在更高一层级的处理url中,用get_absolute_url()方法
urls.py中:
from django.urls import path
from . import views
urlpatterns = [
path('articles/<int:year>/',views.year_archive,name='year_archive'),
]
html模板中:
<a href="{% url 'year_archive' 2012 %}">2012 Archive</a>
<ul>
{% for yearvar in year_list %}
<li><a href="{% url 'year_archive' yearvar %}">{{ yearvar }} Archive</a></li>
{% endfor %}
</ul>
Python代码中:
from django.urls import reverse
from django.http import HttpResponseRedirect
def redirect_to_year(request):
# ...
year = 2006
# ...
return HttpResponseRedirect(reverse('year_archive', args=(year,)))
get_absolute_url()方法:
class Article(models.Model):
def get_absolute_url(self):
return reverse('blog:detail', kwargs={'pk': self.pk})
当点击一篇文章的继续阅读,跳转文章详情页面