Django 路由
封面图
•
2025-10-15
•
Django教程
4
0
0
0
在 Django 中,**路由(Routing)** 是通过 `urls.py` 文件来配置的,它决定了当用户访问某个 URL 时,Django 应该调用哪个视图(View)函数或类。 --- ## 🧩 1. 基本结构 Django 的路由配置通常位于两个地方: - **项目级别的 `urls.py`**(例如:`myproject/urls.py`) - **应用级别的 `urls.py`**(例如:`myapp/urls.py`) --- ## 📜 2. 项目级 `urls.py` 这是 Django 项目的主路由文件,一般内容如下: ```python # myproject/urls.py from django.contrib import admin from django.urls import path, include urlpatterns = [ path('admin/', admin.site.urls), path('myapp/', include('myapp.urls')), # 包含应用的路由 ] ``` - `path()`:用于定义 URL 路径和对应的视图。 - `include()`:用于包含其他应用的路由配置。 --- ## 📄 3. 应用级 `urls.py` 每个应用可以有自己的 `urls.py` 文件,比如: ```python # myapp/urls.py from django.urls import path from . import views urlpatterns = [ path('', views.index, name='index'), # 根路径 path('about/', views.about, name='about'), # /about/ path('contact/', views.contact, name='contact'), ] ``` 然后在项目级的 `urls.py` 中使用 `include('myapp.urls')` 来引入。 --- ## 🧠 4. 路由中的参数传递 你可以通过 URL 传递参数给视图函数: ### 示例 1:位置参数(Path converters) ```python path('articles/<int:year>/', views.year_archive, name='year-archive') ``` 在视图中: ```python def year_archive(request, year): # 使用 year 参数 ``` ### 示例 2:关键字参数 ```python path('articles/<int:year>/<str:month>/', views.month_archive, name='month-archive') ``` 在视图中: ```python def month_archive(request, year, month): # 使用 year 和 month ``` --- ## 🎯 5. 命名 URL(URL names) 使用 `name` 参数可以在模板中通过 `{% url 'name' %}` 引用 URL,提高可维护性。 ```python path('about/', views.about, name='about') ``` 在模板中: ```html <a href="{% url 'about' %}">About</a> ``` --- ## 🧩 6. 使用类视图(Class-based Views) 如果你使用的是基于类的视图,可以这样写: ```python from django.urls import path from .views import MyView urlpatterns = [ path('my-view/', MyView.as_view(), name='my-view'), ] ``` --- ## ✅ 7. 常见问题 | 问题 | 解决方法 | |------|----------| | 404 页面未找到 | 检查 `urls.py` 是否正确,是否遗漏了 `include()` | | URL 不匹配 | 确保路径和视图函数名称一致 | | 无法访问 admin | 确保 `admin/` 路径已加入 `urlpatterns` | --- ## 📘 8. 参考文档 - [Django 官方文档 - URL dispatcher](https://docs.djangoproject.com/en/4.2/topics/http/urls/) --- 如果你有具体的路由需求(比如带参数的 URL、正则表达式、重定向等),欢迎告诉我,我可以帮你具体实现。
上一篇:
Django 中间件
下一篇:
Django Form 组件
标题录入,一次不能超过6条
返回顶部
留言
留言
评论