Python Django从视图重定向到root
我正在创建一个django项目。然而,我遇到了一个小问题。我的url.py看起来像这样Python Django从视图重定向到root,python,django,authentication,redirect,Python,Django,Authentication,Redirect,我正在创建一个django项目。然而,我遇到了一个小问题。我的url.py看起来像这样 url(r'^login/(?P<nextLoc>)$', 'Home.views.login'), url(r'^logout/$', 'Home.views.logout'), 现在,当我进入登录页面时,它将按预期打开。在我提交表单之后,我得到一个错误,说它找不到模块URL。在仔细研究之后,我注意到重定向(“/”)实际上转化为http://localhost/login/而不是http://
url(r'^login/(?P<nextLoc>)$', 'Home.views.login'),
url(r'^logout/$', 'Home.views.logout'),
现在,当我进入登录页面时,它将按预期打开。在我提交表单之后,我得到一个错误,说它找不到模块URL。在仔细研究之后,我注意到重定向(“/”)实际上转化为http://localhost/login/
而不是http://localhost/
。注销时也会发生同样的情况,即尝试打开urlhttp://localhost/logout/
而不是http://localhost/
。基本上,当页面打开时http://localhost/login
,重定向(“/”)将/添加到当前url的末尾,瞧,我得到了一个我没有预料到的url-http://localhost/login/
。我无法使用重定向命令将其重定向到站点的根目录
请帮我解决这个问题,如果可能的话,还请解释Django这种非理性行为的原因。如果您查看,有几件事可以传递给函数:
- 模型
- 视图名称
- 网址
url(r'^$', 'Home.views.index'),
我将改为使用如下重定向:
redirect('Home.views.index')
我正在使用Django3.1。这就是我为实现这一目标所做的: 在
url.py中
from django.shortcuts import redirect
urlpatterns = [
path('', lambda req: redirect('/myapp/')),
path('admin/', admin.site.urls),
path('myapp/', include('myapp.urls'))
]
你试过HttpResponseRedirect吗?从django.http导入HttpResponseRedirect def注销(请求):返回HttpResponseRedirect(“/”),URL.py的其余部分在哪里?什么视图对应于“/”?jterrace是正确的,因为您使用的是url()
,所以您可以name
iturl(r'^$,'Home.views.index',name=“Home\u index”)
并在视图中使用它作为返回HttpResponseRedirect(反向('Home\u index'))
也可以在模板中与
一起使用它,这很好用,但是你能解释一下它是如何工作的吗?具体来说,如果我只使用重定向,而不使用lambda,为什么它不起作用呢。
from django.shortcuts import redirect
urlpatterns = [
path('', lambda req: redirect('/myapp/')),
path('admin/', admin.site.urls),
path('myapp/', include('myapp.urls'))
]