Django中urlresolvers模块用于URL分发的实践指南
在Django中,urlresolvers模块(在Django 1.9版本之前称为django.core.urlresolvers)用于URL分发和解析的工具。它允许我们将URL映射到视图函数或类,并且可以帮助我们在模板中生成URL。
使用urlresolvers模块的 步是在项目的urls.py文件中导入它:
from django.core.urlresolvers import reverse from django.core.urlresolvers import resolve
URL分发的主要实践指南如下:
1. 定义URL模式:
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^$', views.index, name='index'),
url(r'^about/$', views.about, name='about'),
url(r'^contact/$', views.contact, name='contact'),
]
在这个例子中,我们定义了三个URL模式,分别对应于三个视图函数。使用正则表达式定义URL匹配规则,并分配一个名称。
2. 使用reverse函数生成URL:
在视图函数中,可以通过使用reverse函数,根据URL模式的名称生成URL。例如:
from django.shortcuts import render, redirect
from django.core.urlresolvers import reverse
def my_view(request):
url = reverse('index')
return redirect(url)
在这个例子中,视图函数my_view生成了一个名为index的URL,并通过redirect函数重定向到该URL。
3. 使用resolve函数解析URL:
如果我们在视图函数中需要解析URL参数,可以使用resolve函数。它会解析当前请求的URL,并返回一个包含解析信息的ResolverMatch实例。例如:
from django.shortcuts import render
from django.core.urlresolvers import resolve
def my_view(request):
match = resolve(request.path_info)
view_name = match.view_name
view_args = match.args
view_kwargs = match.kwargs
return render(request, 'my_template.html', {'view_name': view_name, 'view_args': view_args, 'view_kwargs': view_kwargs})
在这个例子中,视图函数my_view解析了当前请求的URL,并将解析结果传递给模板进行渲染。
4. 在模板中生成URL:
在模板中,可以使用url模板标签来生成URL。例如:
<a href="{% url 'index' %}">首页</a>
在这个例子中,url标签的参数为URL模式的名称,它会自动生成对应的URL。
5. 命名URL模式:
给URL模式分配一个名称有很多好处,例如可以避免硬编码URL,方便维护和修改,以及更好的可读性。要给URL模式命名,只需要在url函数中使用name参数。例如:
urlpatterns = [
url(r'^$', views.index, name='index'),
url(r'^about/$', views.about, name='about'),
]
在这个例子中,我们给两个URL模式分别命名为index和about。
通过以上的指南和例子,我们可以灵活地使用urlresolvers模块来进行URL分发和解析,从而更好地组织和管理我们的URL。
