Django项目中如何从一个应用的视图重定向到另一应用的视图
Django跨应用重定向实现方案
问题根因
你当前项目的member和ctr两个应用都在urls.py中定义了名为foradmin的路由,Django默认会优先匹配当前应用下的同名路由,因此直接写redirect('foradmin')无法跳转到ctr应用的对应页面。
解决步骤
- 为应用路由配置命名空间
首先分别在两个应用的urls.py头部声明应用名,避免路由名冲突:
在ctr/urls.py开头添加:
app_name = 'ctr'
在member/urls.py开头添加:
app_name = 'member'
然后确认项目根目录的urls.py中已经正确引入两个应用的路由配置:
from django.urls import path, include urlpatterns = [ # 其他全局路由 path('member/', include('member.urls')), path('ctr/', include('ctr.urls')), ]
- 修改重定向逻辑
修改member/views.py中的登录重定向代码,指定使用ctr应用的路由命名空间:
def loginpage(request): if user is not None: login(request, user) if user.is_superuser: # 增加命名空间前缀,明确指定跳转到ctr应用的foradmin路由 return redirect('ctr:foradmin')
可选优化
如果你member应用下的foradmin视图和对应路由没有实际用途,可以直接删除member/urls.py中的path('foradmin', views.foradmin, name="foradmin")配置,以及member/views.py中多余的foradmin视图,避免后续路由混淆。
效果验证
修改完成后重启Django服务,使用超级管理员账号登录,即可直接跳转到ctr应用对应的foradmin.html页面。
内容的提问来源于stack exchange,提问作者Ritankar Bhattacharjee
相关产品推荐
相关产品推荐

