如何在 Django 中包含其他 URL 模式?

2023-04-11 00:00:00 模式 包含 如何在

在 Django 中,我们可以使用 include() 函数来包含其他 URL 模式,包含的模式可以来自于同一个应用程序中的 urls.py 文件,也可以来自于其他应用程序中的 urls.py 文件。

假设我们有一个名为 myapp 的应用程序,它有两个视图函数 views.foo 和 views.bar,我们可以在 myapp 的 urls.py 文件中定义这两个视图函数的 URL 模式:

from django.urls import path
from . import views

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

现在我们想在项目的主 urls.py 文件中包含 myapp 的 URL 模式,我们可以使用 include() 函数:

from django.urls import include, path

urlpatterns = [
    path('myapp/', include('myapp.urls')),
]

在这个例子中,我们将 myapp 的 URL 模式包含在了 '/myapp/' 路径下,这意味着访问 '/myapp/foo/' 将会显示 views.foo 函数的内容。

需要注意的是,include() 函数的第一个参数应该是一个字符串,指定需要包含的 URL 模式所在的文件(通常是一个应用程序的 urls.py 文件)的路径。我们也可以使用命名空间来避免不同应用程序之间的 URL 名称冲突。

例如,我们可以将 myapp 的 URL 模式包含在一个名为 'myapp_urls' 的命名空间下:

from django.urls import include, path

urlpatterns = [
    path('myapp/', include(('myapp.urls', 'myapp'), namespace='myapp_urls')),
]

这样,我们可以在其他应用程序中使用 'myapp:foo' 和 'myapp:bar' 来引用 myapp 中的视图函数。例如,在一个名为 otherapp 的应用程序中,我们可以这样定义一个模板中的链接:

<a href="{% url 'myapp:foo' %}">Link to foo</a>

这会生成链接 '/myapp/foo/',并调用 myapp 中的 views.foo 函数。

相关文章