Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django从视图重定向到root_Python_Django_Authentication_Redirect - Fatal编程技术网

Python Django从视图重定向到root

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://

我正在创建一个django项目。然而,我遇到了一个小问题。我的url.py看起来像这样

url(r'^login/(?P<nextLoc>)$', 'Home.views.login'),
url(r'^logout/$', 'Home.views.logout'),
现在,当我进入登录页面时,它将按预期打开。在我提交表单之后,我得到一个错误,说它找不到模块URL。在仔细研究之后,我注意到重定向(“/”)实际上转化为
http://localhost/login/
而不是
http://localhost/
。注销时也会发生同样的情况,即尝试打开url
http://localhost/logout/
而不是
http://localhost/
。基本上,当页面打开时
http://localhost/login
,重定向(“/”)将/添加到当前url的末尾,瞧,我得到了一个我没有预料到的url-
http://localhost/login/
。我无法使用重定向命令将其重定向到站点的根目录

请帮我解决这个问题,如果可能的话,还请解释Django这种非理性行为的原因。如果您查看,有几件事可以传递给函数:

  • 模型
  • 视图名称
  • 网址
一般来说,我认为最好重定向到视图名称而不是URL。在您的情况下,假设您的urls.py有一个类似以下内容的条目:

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
it
url(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'))
]