2014-09-05 3 views
0

Это моя структура проектаВойти перенаправлять на другой вид приложения

project 
    app 
    login 
    manage.py 

После успешного входа в систему, я хочу, мой пользователь будет перенаправлять на localhost:8000/app, но в настоящее время он будет перенаправлять http://localhost.com:8000/accounts/login/?next=/ потому что я поставил его мой вид входа в систему в качестве

def login_view(request): 
    if request.POST and form.is_valid(): 
     user = form.login(request) 
     if user: 
      login(request, user) 
      return render_to_response('app/home.html',RequestContext) 
     else: 
      return HttpResponse('disabled account') 
    return render_to_response('login.html', form ,RequestContext) 

я не могу в состоянии использовать HttpResponseRedirect(reverse('app.views.dashboard')), потому что вид панели не выходит в том же логинviews.py

если я импортировать как

from app import views as app_dashboard или from app import dashboard

Я получаю ниже ошибки

Reverse для 'app.views.dashboard' с аргументами '()' и именованных аргументов «{} ' не найдено. 0 шаблон (ы) попытался: []

Конечная нота ниже мой Войти URL в настоящее время

<a href="{% url "django.contrib.auth.views.login" %}?next={{request.path}}" id="signIn">Sign in</a> 

Добавлено:

приложение/urls.py

urlpatterns = patterns('app.views', 
    (r'^$', 'dashboard_view'), 

project/urls.py

url(r"^", include("app.urls",)), 
(r'^accounts/login/$', 'django.contrib.auth.views.login'), 
(r'^accounts/logout/$', 'django.contrib.auth.views.logout', {'next_page' : '/accounts/login'}), 
+0

Пожалуйста, покажите нам свое 'urls.py' приложения' app_dashboard'. –

+0

@goliney Я добавил url.py .. дайте мне знать, если вы хотите любой .. – 2014-09-05 10:23:38

ответ

0

Первой точки: использовать именованные URLs, СF https://docs.djangoproject.com/en/1.6/topics/http/urls/#naming-url-patterns - это должно решить проблему reverse.

Второй пункт: вы показываете код для своего собственного входа в систему, но ваш url.py и экстракт шаблона оба ссылаются на django.contrib.auth.views.login. Кроме того, вы указываете next параметров в URL вашего шаблона, так django.contrib.auth.views.login же перенаправит вас там, как объяснено в FineManual (тм):

Если вызывается через POST с присланным пользователем учетных данных, он пытается войти в систему пользователя в . Если вход успешно завершен, просмотр перенаправляется к URL-адресу, указанному в следующем. (...)

Наконец: вам не нужно, чтобы написать вам собственный взгляд, если все, что вы хотите, чтобы заставить вид входа в систему, чтобы всегда перенаправлять на тот же URL:

(. ..) Если следующий не указан, он перенаправляется на settings.LOGIN_REDIRECT_URL (который по умолчанию соответствует/accounts/profile /). Если логин не удался, он повторно отображает форму входа в систему.

IOW:

  1. использование имени URLs везде (имя собственные адреса, и использовать имена URLS при вызове reverse или {% url %} templatetag)
  2. избавиться от next=... в шаблонах
  3. установите settings.LOGIN_REDIRECT_URL на URL вашей панели.
+0

после предоставления 'name' в' app/urls.py' urls теперь 'reverse' working, – 2014-09-05 14:04:43

+0

и, во-вторых, спасибо за ваше разъяснение. Я не знал, что раньше использовал две системы входа. Один из них - это 'auth login' и мой собственный' login_view'. после того, как решили использовать 'auth login' и поставить' redirect_url' в settings.py, теперь успешный переадресация имени пользователя на 'app' работает. – 2014-09-05 14:07:24

+0

, поэтому сделайте вывод, и у меня есть сомнения, если мне не нужна функция login_view, тогда как django для проверки Форма, которую я написал, Глупый вопрос, но я ожидаю вашего ответа. – 2014-09-05 14:14:37

-1
def login_view(request): 
    if request.POST and form.is_valid(): 
     user = form.login(request) 
     if user: 
      login(request, user) 
      return redirect('/app/') 
     else: 
      return HttpResponse('disabled account') 
    return render_to_response('login.html', form ,RequestContext) 

Изменения визуализации ответа для перенаправления дать ваш необходимый URL для перенаправления

+1

Использование жестко запрограммированных URL вместо использования функции 'reverse' Django вряд ли является хорошей идеей. –

+0

@brunodesthuilliers он сказал при импорте панели инструментов приложения, попадающей в некоторую ошибку. Не импортируйте другое приложение, как отменить? –

+0

Используйте именованные URL. –

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