Nella mia funzione di visualizzazione voglio chiamare un'altra visualizzazione e passare i dati ad esso:Django ritorno redirect() con parametri
return redirect('some-view-name', backend, form.cleaned_data)
, dove back-end è di registration.backends oggetto e form.cleaned_data è un dict dei dati del modulo (ma entrambi devono essere inviati come * args o ** kwargs per impedire l'aumento dell'errore Don't mix *args and **kwargs in call to reverse()!
). Da quello che ho trovato nella documentazione:
def my_view(request):
...
return redirect('some-view-name', foo='bar')
Sembra che ho bisogno di fornire 'un po-view-name' argomento, ma è solo il nome della funzione di visualizzazione, oppure il nome dell'URL ? Quindi vorrei renderlo simile al modo in cui è fatto in django-registrazione, in cui:
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 così ora, posso chiamare direttamente la mia funzione di visualizzazione o devo per fornire un URL per esso? E cosa più importante, come dovrebbe essere la mia chiamata funciotn (e un url se necessario)? Sia il backend che clean_data vengono passati attraverso questa vista per un utilizzo successivo. Ho provato questo, ma è improprio:
url(r'^link/$', some-view-name)
def some-view-name(request, *args):
Oltre a questo:
return redirect('some_url', backend=backend, dataform.cleaned_data)
url(r'^link/$', some-view-name)
def some-view-name(request, backend, data):
ancora NoReverseMatch. Ma nella registrazione di django, ho visto qualcosa del genere:
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):
e se non funzionerò su clean_data in questa vista, ma semplicemente lo passerò per un utilizzo successivo? Ho molti campi nella dicitura clean_data, quindi vorrei evitare di passarli come stringa get :) – muntu
Non capisco questo commento. Si prega di spiegare in modo più dettagliato, aggiornando la domanda se necessario. –
questa seconda vista memorizzerà solo questi dati inviati per ulteriore utilizzo. Ma sei sicuro di dover fornire l'url per questo? Da documenti sembra che sto chiamando direttamente la vista. Speravo anche solo di inviare un dizionario con backend e dati in redirect() (come è fatto in django-registration) e poi nell'url (come questo dict in funzione register), ma da quello che vedo è impossibile? – muntu