В моей функции зрения я хочу, чтобы вызвать другую точку зрения и передавать данные на него:Джанго обратный редирект() с параметрами
return redirect('some-view-name', backend, form.cleaned_data)
, где Бэкэнд из registration.backends объекта, и form.cleaned_data является ДИКТ данных формы (но оба они должны быть отправлены как * args или ** kwargs, чтобы предотвратить повышение ошибки Don't mix *args and **kwargs in call to reverse()!
). Из того, что я нашел в документации:
def my_view(request):
...
return redirect('some-view-name', foo='bar')
Похоже, мне нужно, чтобы обеспечить «некоторый-View-имя» аргумент, но это просто имя функции вида, или имя URL ? Так что я хотел бы сделать это подобно тому, как это сделано в Джанго регистрации, где:
to, args, kwargs = backend.post_registration_redirect(request, new_user)
return redirect(to, *args, **kwargs)
def post_registration_redirect(self, request, user):
return ('registration_complete',(), {})
Ok так что теперь, я могу позвонить напрямую мою функцию просмотра или мне нужно сделать, чтобы обеспечить URL для него? И что еще важнее, как должен выглядеть мой funciotn (и URL-адрес, если необходимо)? Как бэкэнд, так и cleaned_data просто передаются через это представление для последующего использования. Я попытался это, но это неприлично:
url(r'^link/$', some-view-name)
def some-view-name(request, *args):
Как это:
return redirect('some_url', backend=backend, dataform.cleaned_data)
url(r'^link/$', some-view-name)
def some-view-name(request, backend, data):
еще NoReverseMatch. Но в django-регистрации я видел что-то вроде этого:
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='user/login_logout_register/registration_form.html',
extra_context=None):
и если я не буду работать с cleaned_data в этом представлении, а просто передам его для последующего использования? У меня есть много полей в файле cleaned_data, поэтому я бы хотел избежать передачи их как строки get :) – muntu
Я не понимаю этот комментарий. Пожалуйста, объясните подробнее, обновив свой вопрос, если это необходимо. –
этот второй вид будет хранить только эти отправленные данные для дальнейшего использования. Но вы уверены, что мне нужно предоставить URL-адрес? Из документов это похоже, что я просто вызываю представление напрямую. Также я надеялся просто отправить словарь с бэкэнд и данными в redirect() (как это делается в django-registration), а затем в url (например, этот dict в функции register), но из того, что я вижу, это невозможно? – muntu