📜  Django URL 模式 | Python(1)

📅  最后修改于: 2023-12-03 14:40:46.634000             🧑  作者: Mango

Django URL 模式 | Python

在Django中,URL模式是将网址映射到视图的方法。当用户在浏览器输入URL时,Django将会根据URL模式来确定要调用哪个视图函数。

URL模式的基本用法

在Django中,URL模式是使用正则表达式(regular expression,re)来表达的。一个URL模式通常包括以下几个部分:

  • URL模式本身:用正则表达式来表达
  • 视图:一个Python函数或者一个类视图
  • 名称(可选):给URL模式起一个名称,用于在代码中引用

比如下面这个URL模式:

from django.urls import path
from . import views

urlpatterns = [
    path('hello/', views.hello, name='hello'),
]

这个URL模式的意思是,当用户访问网站的/hello/路径时,Django将会调用views.hello函数来处理这个请求。这个URL模式还有一个名字叫做hello,这样我们在代码中可以用urlresolvers.reverse('hello')来获取/hello/的URL。

视图函数通常会返回一个HttpResponse对象,这个对象会被Django返回给用户的浏览器。

URL模式的参数化

一个常见的需求是,需要在URL中传递参数,然后在视图函数中处理这些参数。比如一个博客网站,需要根据用户请求的URL来获取不同的文章。这时就可以使用Django的URL模式参数化的功能。

下面是一个这样的例子:

from django.urls import path, re_path
from . import views

urlpatterns = [
    re_path(r'^articles/(\d{4})/$', views.year_archive),
    re_path(r'^articles/(\d{4})/(\d{2})/$', views.month_archive),
    re_path(r'^articles/(\d{4})/(\d{2})/(\d+)/$', views.article_detail),
]

这个例子中,我们定义了三个URL模式,分别对应不同的文章归档页面和文章详情页。URL模式中的(\d+)用于匹配一个或多个数字,这个数字将会作为参数传递给对应的视图函数。

在视图函数中,我们可以通过函数参数来获取这些参数。比如:

def article_detail(request, year, month, pk):
    # ...

这个视图函数接受三个参数:year、month和pk,分别对应URL模式中的(\d{4})、(\d{2})和(\d+)。

URL模式的命名空间

在复杂的应用中,可能会出现不同的应用包含相同的URL模式。为了避免冲突,可以为不同的应用指定不同的命名空间。这个功能在Django 2.0中新增了。

在URL模式中指定命名空间可以通过namespace参数来实现。比如:

from django.urls import path, include

app_name = 'blog'    # 定义命名空间

urlpatterns = [
    path('', include('blog.urls', namespace='blog')),    # 嵌套应用的URL
]

这个例子中,我们定义了一个命名空间为blog(注意这个名称和views.py中的app_name是一致的),然后使用include将子应用的URL模式嵌套进来,并通过namespace参数指定了命名空间。这样在子应用中就可以通过urlresolvers.reverse('blog:article_detail')来获取URL了。

总结

Django的URL模式是将网址映射到视图的方法。使用正则表达式(re)可以实现参数化的URL。在复杂应用中,可以使用命名空间来避免不同应用之间的URL冲突。