domanda newbie ....superare un valore iniziale ad una forma di campo Django Django
Sto cercando di scrivere un modulo di ricerca e mantenere lo stato della casella di input tra la richiesta di ricerca e risultati di ricerca.
Ecco la mia forma:
class SearchForm(forms.Form):
q = forms.CharField(label='Search: ', max_length=50)
Ed ecco il mio codice di vista:
def search(request, q=""):
if (q != ""):
q = q.strip()
form = SearchForm(initial=q)
#get results here...
return render_to_response('things/search_results.html',
{'things': things, 'form': form, 'query': q})
elif (request.method == 'POST'): # If the form has been submitted
form = SearchForm(request.POST)
if form.is_valid():
q = form.cleaned_data['q']
# Process the data in form.cleaned_data
return HttpResponseRedirect('/things/search/%s/' % q) # Redirect after POST
else:
form = SearchForm()
return render_to_response('things/search.html', {
'form': form,
})
else:
form = SearchForm()
return render_to_response('things/search.html', {
'form': form,
})
Ma questo mi dà l'errore:
Caught an exception while rendering: 'unicode' object has no attribute 'get'
Come posso passare il valore iniziale? Varie cose che ho provato sembrano interferire con il parametro request.POST.
L'errore è dovuto al passaggio di un oggetto Unicode invece di un dict. (dict definisce 'get()', ma string/unicode no). – spookylukey
Ah, ottimo punto. Ho visto l'errore ma non ho effettuato la connessione! – cethegeek
Grazie per i commenti dettagliati e la soluzione. L'ho implementato in questo modo perché volevo che gli URL dei risultati fossero simili a/search/query (so che tuttavia ci sono problemi con questo, e potrebbe benissimo rivederlo). Devo reindirizzare dopo il POST, quindi non ci sono problemi con la pressione del pulsante Indietro. – AP257