Django URL 配置指南
在Django中,URL配置是将URL模式映射到视图函数的过程。以下是配置Django URL的基本步骤:
1. 项目根URL配置 (urls.py)
在项目的主目录下的urls.py
文件中进行配置:
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('blog/', include('blog.urls')), # 包含应用的URL配置
path('', include('home.urls')), # 首页URL配置
]
2. 应用级URL配置
在每个Django应用的目录下创建urls.py
文件:
from django.urls import path
from . import views
urlpatterns = [
path('', views.index, name='index'), # 示例: 博客首页
path('articles/<int:article_id>/', views.article_detail, name='article_detail'),
path('category/<slug:category_slug>/', views.category_view, name='category'),
]
URL模式详解
path() 函数参数
- 个参数: URL模式字符串
- 第二个参数: 视图函数或类视图
name
参数: 为URL命名,用于模板中的反向解析
路径转换器
<int:pk>
- 匹配整数<str:name>
- 匹配任何非空字符串(不包括/)<slug:title>
- 匹配slug字符串(字母、数字、连字符、下划线)<uuid:uuid>
- 匹配UUID字符串<path:path>
- 匹配任何字符串包括/
高级URL配置
使用正则表达式(re_path)
from django.urls import re_path
urlpatterns = [
re_path(r'^articles/(?P<year>[0-9]{4})/$', views.year_archive),
]
包含其他URL配置
urlpatterns = [
path('community/', include('aggregator.urls')),
path('contact/', include('contact.urls')),
]
命名空间
# 主urls.py
path('polls/', include(('polls.urls', 'polls'), namespace='polls')),
# 模板中使用
{% url 'polls:detail' question.id %}
实践
- 为每个URL模式命名(name参数)
- 使用应用级URL配置保持模块化
- 对于复杂URL模式使用正则表达式
- 使用命名空间避免名称冲突
- 保持URL设计简洁一致
这样配置后,Django会根据请求的URL找到对应的视图函数或类视图进行处理。
(牛站网络)