w mojej funkcji widoku chcę zadzwonić inny widok i przekazać dane do niego:Django przekierowanie return() z parametrami
return redirect('some-view-name', backend, form.cleaned_data)
, gdzie backend jest registration.backends sprzeciw i form.cleaned_data jest DICT danych formularza (ale oba muszą być wysłane jako * args lub ** kwargs, aby zapobiec podniesieniu błędu Don't mix *args and **kwargs in call to reverse()!
). Z tego co znalazłem w docs:
def my_view(request):
...
return redirect('some-view-name', foo='bar')
Wygląda na to, że trzeba zapewnić „jakiś-View-name” argumentów, ale jest to tylko nazwa funkcji widoku lub nazwa url ? Więc chciałbym, aby w podobny sposób jak to się robi w django rejestracji, gdzie:
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, więc teraz mogę zadzwonić bezpośrednio moją funkcję widoku czy muszę podać adres URL do niego? I co ważniejsze, jak powinien wyglądać mój funciotn (i URL w razie potrzeby)? Zarówno backend, jak i cleaned_data są właśnie przekazywane przez ten widok do późniejszego użycia. Próbowałem to, ale to jest niewłaściwe:
url(r'^link/$', some-view-name)
def some-view-name(request, *args):
Jak również to:
return redirect('some_url', backend=backend, dataform.cleaned_data)
url(r'^link/$', some-view-name)
def some-view-name(request, backend, data):
nadal NoReverseMatch. Ale w rejestracji django widziałem coś takiego:
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):
i jeśli nie będę działać na clean_data w tym widoku, ale po prostu przekazać go do późniejszego wykorzystania? Mam wiele pól w dykcie cleaned_data, więc chciałbym uniknąć podania ich jako ciągu get :) – muntu
Nie rozumiem tego komentarza. Wyjaśnij bardziej szczegółowo, jeśli to konieczne, zaktualizuj swoje pytanie. –
ten drugi widok będzie przechowywać tylko te wysłane dane do dalszego wykorzystania. Ale czy na pewno muszę podać adres URL? Z dokumentów wygląda to tak, jakbym po prostu wywoływał widok bezpośrednio. Miałem także nadzieję, że po prostu wyślę słownik z backendem i danymi w przekierowaniu() (tak jak dzieje się to w rejestracji Django), a następnie w adresie URL (jak ten dyktuj w funkcji rejestru), ale z tego, co widzę, jest niemożliwe? – muntu