В моей функции просмотра я хочу вызвать другое представление и передать ему данные:
return redirect('some-view-name', backend, form.cleaned_data)
, где backend - это объект 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')
Похоже, мне нужно указать аргумент some-view-name, но это просто имя функции просмотра или имя URL-адреса? Поэтому я хотел бы сделать его похожим на то, как это делается в django-registration, где:
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', (), {})
Хорошо, теперь могу я вызвать функцию просмотра напрямую или мне нужно указать для нее URL-адрес? И что более важно, как должен выглядеть мой вызов funciotn (и URL-адрес, если необходимо)? И backend, и 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-registration я видел что-то вроде этого:
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):
urls.py:
#... url(r'element/update/(?P<pk>\d+)/$', 'element.views.element_update', name='element_update'),
views.py:
from django.shortcuts import redirect from .models import Element def element_info(request): # ... element = Element.object.get(pk=1) return redirect('element_update', pk=element.id) def element_update(request, pk) # ...
источник