2016-09-28 3 views
2

я застрял с проектом Django, я пытался добавить другое приложение под названием Войти, чтобы сделать страницу входа в систему, но по какой-то причине, страница просто перенаправляет на главную страницу для администратора страницыДжанго перенаправлять все на главную страницу

кроме Например: 127.0.0.1:8000 перейдет на главную страницу, но 127.0.0.1:8000/login также отобразит главную страницу, хотя я связал с ней другой шаблон.

Вот мой код:

главный 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') 

портал urls.py

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

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

Пожалуйста, покажите свой файл 'portal/urls.py'. – knbk

+1

Измените порядок третьей и второй строк в главном 'urls.py'. – Selcuk

+0

@knbk Я редактировал пост –

ответ

2

Я вижу 2 проблемы здесь:

  1. Как @ DanielRoseman, упомянутое выше, регулярное выражение ^ соответствует чему угодно, поэтому вы должны изменить его на ^$.
  2. Когда вы используете include, остальная часть пути после сопоставления include с включенным шаблоном. Вы также захотите использовать ^$ в своем url.py вашего входа.
+0

Спасибо! Это был ответ. Также спасибо @danielRoseman за тот же ответ –

4

Вы не ограничиваете URL-адрес портального портала, поэтому он соответствует всем. Оно должно быть:

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

Если я что я получаю эту ошибку: Используя URLconf, определенный в virt.urls, Django пробовал эти шаблоны URL, в следующем порядке: ^ админ/ ^ Войти/ ^ $ Текущий URL-адрес, логин, не соответствует ни одному из них. –

+0

Вам нужен какой-либо другой файл, чтобы понять это? –

+1

Ваш логин-адрес сам по себе включен в/login. Таким образом, полный URL-адрес будет/login/login, что почти наверняка не то, что вы хотите. Вероятно, вам нужно использовать ''^$ ''в url.py для входа в систему, как в портале. –

0

Кроме того, если регулярное выражение Вход/$, но вы вводите HTTP: // сервер/Логин, то он не будет соответствовать http://server/login/ воли Тогда как. Вы можете попробовать изменить регулярное выражение для входа/* $, которое будет соответствовать любому числу (даже нулю)/в конце URL-адреса.

Таким образом, http: // server/login, http: // server/login /, http: // server/login //// все будут совпадать.

Или, если вы хотите быть конкретными, Логин/{0,1} $ может работать (хотя, что синтаксис регулярных выражений является из памяти!)

+0

Django имеет параметр «APPEND_SLASH», который задан по умолчанию, который будет перенаправлять '/ login' на'/login/', если первое не соответствует, поэтому это обычно не нужно. Если вам это нужно, вы можете использовать '^ login /? $' Для соответствия одной или нулевой слэшам. – knbk

Смежные вопросы