如何在Django中为同一个视图配置两个URL(路径)?
Django 同视图绑定多URL的实现方法
直接在项目/应用的urls.py文件中定义多条路径条目,全部指向同一个视图即可,分为两种常用场景:
场景1:两个URL返回完全一致的内容
直接写两条path规则,指向同一个视图函数/类视图即可,示例如下:
视图函数示例
# views.py from django.shortcuts import render def about(request): return render(request, 'about.html')
URL配置示例
# urls.py from django.urls import path from . import views urlpatterns = [ # 第一条路径 path('about/', views.about, name='about_alias1'), # 第二条路径,指向同一个视图 path('about-us/', views.about, name='about_alias2'), ]
此时用户访问/about/和/about-us/都会触发同一个about视图,返回完全相同的页面内容。
场景2:两个URL使用同一视图,但逻辑有微小差异
可以通过给路径传递额外参数的方式实现,无需重复编写视图代码:
带参数的视图示例
# views.py from django.shortcuts import render from .models import Article def article_list(request, category): articles = Article.objects.filter(category=category) return render(request, 'list.html', {'articles': articles})
URL配置示例
# urls.py from django.urls import path from . import views urlpatterns = [ # 传递技术分类参数 path('tech/', views.article_list, {'category': 'tech'}, name='tech_articles'), # 传递运营分类参数,同一视图返回不同分类的内容 path('operation/', views.article_list, {'category': 'operation'}, name='operation_articles'), ]
如果是类视图,可以直接在as_view()方法中传入自定义参数修改类属性,示例:
# urls.py from django.urls import path from .views import ArticleListView urlpatterns = [ # 每页展示10条 path('articles/', ArticleListView.as_view(paginate_by=10), name='article_list_10'), # 每页展示20条,同一类视图 path('articles/more/', ArticleListView.as_view(paginate_by=20), name='article_list_20'), ]
注意事项
- 不同路径的
name属性必须保持唯一,否则Django反向解析URL时会出现匹配错误 - 如果使用
re_path写正则路径,逻辑完全一致,定义多条规则指向同一视图即可
内容的提问来源于stack exchange,提问作者coderDcoder
相关产品推荐
相关产品推荐

