django newbie: попробуйте отменить auth.views.login в декораторе login_required ()

Я новичок в stackoverflow и django ...

Краткий вопрос (см. «Длинный вопрос» ниже), следующий код в myapps / views.py завершился неудачно:

from django.core.urlresolvers import reverse
...
@login_required(login_url=reverse('django.contrib.auth.views.login'))
def my_view(request):
   pass

Ошибка это:

ViewDoesNotExist at /
tried my-view2 in module myproject.myapps.views. Error was: 'module' object has no attribute 'my-view2'

'my-view2' определяется в myapps / views.py после my-view (и упоминается в myproject / urls.py)

Думаю, здесь есть что-то вроде курицы и яйца, но я могу ' Я не понимаю, в чем я ошибаюсь. Я пытаюсь настроить LOGIN_URL в settings.py вот так с той же ошибкой:

from django.core.urlresolvers import reverse
...
LOGIN_URL=reverse('django.contrib.auth.views.login')

Теперь длинный вопрос (в каком контексте, почему я хочу это сделать):

работая с django 1.3.1, я получил следующее представление, защищенное с auth.decorator:

@login_required
def my_view(request)
  pass

Этот декоратор по умолчанию перенаправляет на / accounts / login (он работает, и это нормально для меня).

При использовании сервера разработки все URL-адреса относятся к localhost: /

На рабочем сервере (с использованием wsgi) все URL-адреса относятся к my-server: / path1 / Это связано с конфигурацией apache, которая говорит что-то вроде: WSGIScriptAlias ​​/ path1 /var/www/path/to/script.wsgi

И это меня устраивает.

Все URL-адреса, определенные в myproject / urls.py, автоматически относятся к этому новому пути, поэтому благодаря django весь мой сайт работает с этим новым «корнем html».

Но мое защищенное представление по-прежнему перенаправляет на my-server: / accounts / login / вместо my-server: / path1 / accounts / login

пока что я заставляю его работать, используя настройки.py

LOGIN_URL=/path1/accounts/login/

или используя параметр login_url декоратора "login_required":

@login_required(login_url="/path1/accounts/login/")

Но я бы хотел, чтобы это представление входа относилось ко всему пути сайта без настройки "path1" как в apache, так и в django / settings.py

I не думайте, что использование reverse в settings.py - это правильное решение ни использовать его в декораторе представления. Но пока я не знаю, как с этим справиться ...

7
задан rhn 9 January 2012 в 15:15
поделиться