Django将所有内容重定向到主页

时间:2016-09-28 09:53:45

标签: python django

我坚持使用Django项目,我尝试添加另一个名为login的应用程序来创建登录页面但由于某种原因,该页面只是重定向到主页,除了管理页面

例如:127.0.0.1:8000将转到主页,但127.0.0.1:8000/login也会显示主页,即使我将另一个模板链接到主页。

这是我的代码:

main urls.py

from django.conf.urls import url, include
from django.contrib import admin

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^', include('portal.urls')),
    url(r'^login/', include('login.urls')),
]

登录urls.py

from django.conf.urls import url
from . import views

urlpatterns = [
    url(r'^login/', views.index, name="login"),
]

登录views.py

from django.shortcuts import render

def index(request):
    return render(request, 'login/login.html')

portal urls.py

from django.conf.urls import url
from . import views

urlpatterns = [
    url(r'^', views.index, name="portal"),
]

3 个答案:

答案 0 :(得分:4)

您不会终止门户网站索引网址,因此它会匹配所有内容。它应该是:

url(r'^$', views.index, name="portal"),

答案 1 :(得分:2)

我在这里看到两个问题:

  1. 正如上面提到的@DanielRoseman,正则表达式^匹配任何内容,因此您应将其更改为^$
  2. 当您使用include时,include匹配后的其余路径将传递给包含的模式。您还需要在登录urls.py中使用^$

答案 2 :(得分:0)

此外,如果正则表达式是登录/ $,但您输入http:// server / login,那么它将不会匹配http://server/login/。 您可以尝试将正则表达式更改为登录/ * $,它将匹配网址末尾的任意数字(甚至为零)。

所以http:// server / login,http:// server / login /,http:// server / login ////都匹配。

或者如果您想要具体,登录/ {0,1} $可能会起作用(尽管该正则表达式语法来自内存!)