Trong chức năng xem của tôi, tôi muốn gọi một chế độ xem khác và chuyển dữ liệu vào nó:
return redirect('some-view-name', backend, form.cleaned_data)
, trong đó backend là đối tượng register.backends và form.cleaned_data là một lệnh của dữ liệu biểu mẫu (nhưng cả hai đều phải được gửi dưới dạng * args hoặc ** kwargs để tránh tăng Don't mix *args and **kwargs in call to reverse()!
lỗi). Từ những gì tôi tìm thấy trong tài liệu:
def my_view(request):
...
return redirect('some-view-name', foo='bar')
Có vẻ như tôi cần cung cấp đối số 'some-view-name', nhưng nó chỉ là tên của chức năng xem hay tên của url? Vì vậy, tôi muốn làm cho nó tương tự như cách nó được thực hiện trong đăng ký django, trong đó:
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', (), {})
Được rồi, bây giờ tôi có thể gọi trực tiếp chức năng xem của mình hay tôi cần cung cấp url cho nó? Và điều quan trọng hơn, lệnh gọi funciotn của tôi (và một url nếu cần) sẽ trông như thế nào? Cả backend và clean_data đều được chuyển qua chế độ xem này để sử dụng sau này. Tôi đã thử điều này, nhưng nó không đúng:
url(r'^link/$', some-view-name)
def some-view-name(request, *args):
Cũng như điều này:
return redirect('some_url', backend=backend, dataform.cleaned_data)
url(r'^link/$', some-view-name)
def some-view-name(request, backend, data):
vẫn là NoReverseMatch. Nhưng trong đăng ký django, tôi đã thấy một cái gì đó như thế này:
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):