Динамические URL входа / выхода в Django - PullRequest
2 голосов
/ 25 октября 2010

У меня есть приложение, которое обслуживает такие страницы / stage / stagename . stagename является переменной.Сопоставители URL просто ищут [0-9A-Za-z] +, чтобы заполнить этот слот.

Теперь, из-за моей настройки, Мое приложение будет иметь корень в / stage / stagename .Я не могу изменить это (без огромных изменений в моей настройке, которые сейчас слишком утомительны и последний вариант).

Мне нужно использовать django.contrib.auth.URL-адреса для входа и выхода из системы не могут быть в моем файле настроек, так как они будут меняться в зависимости от того, где находится мое приложение (для одного это может быть / stage / foo / login, а для другого это может быть / stage / bar / login).

Как заставить внутренний сервер использовать такие динамические URL-адреса?

У меня также есть проблема, связанная с передачей параметра stagename в шаблон, который генерирует мой URL-адрес.Как я могу это сделать?

Ответы [ 2 ]

1 голос
/ 27 августа 2011

Если вы можете вставить redirect_to в контекст для своего шаблона входа, то есть механизм, который вы можете использовать для изменения URL-адреса перенаправления.

В своем шаблоне входа добавьте дополнительный скрытый ввод вформа

<input type="hidden" name="next" value="{% url redirect_to %}">

Теперь в вашем файле urls.py вы можете указать, какой ввод использовать для перенаправления:

url(r'^login/$',
    auth_views.login,
    {'template_name': 'registration/login.html',
     'redirect_field_name': 'next'},
    name='auth_login'),

Если вы сделаете это, вы будете перенаправленыв разные места в зависимости от значения redirect_to.

Вы можете получить redirect_to в своем контексте, указав более одного имени для входа в систему:

url(r'^login/$',
    auth_views.login,
    {'template_name': 'registration/login.html',
     'redirect_field_name': 'next',
     'extra_context': {'redirect_to': 'foo_url'}
    },
    name='foo_login'),

url(r'^login/$',
    auth_views.login,
    {'template_name': 'registration/login.html',
     'redirect_field_name': 'next',
     'extra_context': {'redirect_to': 'bar_url'}
    },
    name='bar_login'),

Или еслиВы не хотите делать такие вещи, вместо этого вы можете использовать что-то в сеансе:

<input type="hidden" name="next" value="{% url session.redirect_to %}">

Надеюсь, что это поможет, и приносим извинения, если в коде есть опечатки!Документация для вида авторизации входа немного сложна для ссылки ссылка .Перейдите по этой ссылке и немного прокрутите вверх!

0 голосов
/ 25 октября 2010

/ stage / foo / login и для других, возможно, /stage/bar/login).

url( r'^stage/(?P<name>[^/]+)/login/$', some_view_function )

Может быть, то, что вы ищете.

Однако у вас, похоже, больше проблем, чем здесь. «Массовые изменения в моей настройке, которые слишком утомительны», указывают на более серьезные и фундаментальные проблемы.

...