Django配置LOGOUT_REDIRECT_URL为refresh视图找不到视图如何解决
问题解决:Logout redirect url 找不到视图
报错原因
该错误的核心原因是你没有在项目的urls.py文件中为refresh视图配置对应命名路由:
- Django的
LOGOUT_REDIRECT_URL参数传入字符串形式的视图名时,会自动调用reverse()函数匹配urls.py中注册的name属性对应的路由 - 你设置
LOGOUT_REDIRECT_URL = 'about'能正常运行,说明你已经为about视图在urls.py中配置了name='about'的路由,而refresh视图没有做对应的配置,所以会触发「View name was wrong」报错。
修复方法
在对应app的urls.py中添加refresh视图的路由配置即可,示例:
from django.urls import path from . import views urlpatterns = [ # 你原有其他路由 path('about/', views.about, name='about'), # 新增refresh路由,指定name为refresh path('refresh/', views.refresh, name='refresh'), ]
另外建议你优化refresh视图的代码,添加默认回退地址,避免HTTP_REFERER为空时出现异常:
def refresh(request): return HttpResponseRedirect(request.META.get("HTTP_REFERER", "/"))
其他登出后刷新页面的实现方案
- 方案1:如果需要每次登出后返回固定页面,直接在
LOGOUT_REDIRECT_URL中配置对应路径即可,比如返回首页设置为LOGOUT_REDIRECT_URL = '/',不需要额外编写视图。 - 方案2:自定义登出视图,将登出逻辑和重定向逻辑合并,不需要单独配置跳转路由:
from django.contrib.auth import logout from django.http import HttpResponseRedirect def custom_logout(request): logout(request) return HttpResponseRedirect(request.META.get("HTTP_REFERER", "/"))
之后在urls.py中将登出路由指向该自定义视图即可,无需额外配置LOGOUT_REDIRECT_URL。
- 方案3:继承Django自带的
LogoutView自定义登出类,动态获取跳转地址:
from django.contrib.auth.views import LogoutView class CustomLogoutView(LogoutView): def get_next_page(self): return self.request.META.get("HTTP_REFERER", super().get_next_page())
在urls.py中配置对应路由指向CustomLogoutView.as_view()即可。
内容的提问来源于stack exchange,提问作者Стопчак Олег
相关产品推荐
相关产品推荐

