2010-06-07 2 views
1

The привязок и вид выглядит следующим образом:Джанго: Как написать обратную функцию для следующего

url(r'^register/$', 
    register, 
    { 'backend': 'registration.backends.default.DefaultBackend' }, 
    name='registration_register'), 



def register(request, backend, success_url=None, form_class=None, 
      disallowed_url='registration_disallowed', 
      template_name='registration/registration_form.html', 
      extra_context=None): 

Что я хочу сделать, это перенаправить пользователей на страницу регистра и указать success_url. Я попробовал обратное ('registration.views.register', kwargs = {'success_url': '/ test /'}), но это, похоже, не работает. Я пытался часами и не мог понять, как это правильно. Спасибо

ответ

1

Если вы хотите, чтобы указать reverse() с параметрами, эти параметры должны быть определены в самой конфигурации URL (regexp). Что-то вроде:

url(r'^register/(?P<success_url>[\w\/]+)/$', 
    register, 
    { 'backend': 'registration.backends.default.DefaultBackend' }, 
    name='registration_register'), 

Вы можете обернуть этот раздел URL в ()? сделать необязательным (так, чтобы он соответствовал только простому регистру/тоже) Разницы между арг и kwargs является то, что с аргументами можно указать неназванный/именованный URL Params в то время как с kwargs только по имени. Итак:

r'^register/(?P<success_url>\w+)/$' 
reverse('url_name', args=[my_success_url]) 
reverse('url_name', kwargs={'success_url': my_success_url}) // both work and do the same 

r'^register/(\w+)/$' 
reverse('url_name', args=[my_success_url]) // only this works 

Edit: Для success_url Params, если вы хотите быть в состоянии соответствовать любому полному относительному URL, включая возможный Params GET в относительном URL, фактическое регулярное выражение может получить довольно сложное , Что-то вроде (непроверенные):

r'^register/(?P<success_url>[\w\/]+(((\?)([a-zA-Z]*=\w*)){1}((&)([a-zA-Z]*=\w*))*)?)/$' 
+0

Спасибо большое! Вся причина этого вопроса заключается в том, что я хочу перенаправить пользователей туда, откуда они пришли после регистрации. Думаю, я могу использовать параметр сеанса. Я считаю, что иногда храню данные сеанса как простой выход. Вы бы порекомендовали сделать это в этом сценарии? Еще раз спасибо! – ninja123

0

Редактировать: Извините, совершенно неправильно прочитал вопрос - я не смотрел на определение функции. На самом деле проблема заключается в том, что ваш URLconf сконструирован таким образом, чтобы сделать невозможным динамическое определение success_url. Он должен быть явно передан функции через словарь extra_context - то есть тот, где вы в настоящее время определили backend. Поскольку в самом URL-адресе нет ничего, чтобы принять этот параметр, он должен быть жестко закодирован.

+0

Так 'success_url', 'form_class', 'disallowed_url' и т.д., все GET параметры? Итак, в общем, все кварги, установленные в функции вида, будут GET-параметрами? – ninja123

+0

Нет проблем, значит, вы имеете в виду, что я не могу перезвонить? но вызвать функцию напрямую? Не могли бы вы привести мне пример. Спасибо – ninja123

+0

Они не являются параметрами GET, это просто дополнительные параметры, отправленные в функцию представления Python. Парамы, определенные (точнее, «захваченные») из URL conf, могут быть также параметрами GET, но не обязательно. Только если вы решите определить URL-адрес в таком формате:^register? My_get_param = (? P \ w +) –

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