Django newbie Frage ....Pass einen Anfangswert zu einem Feld Django Form
Ich versuche, ein Suchformular zu schreiben und den Zustand des Eingabefeldes zwischen der Suchanfrage und die Suchergebnisse zu erhalten.
Hier ist meine Form:
class SearchForm(forms.Form):
q = forms.CharField(label='Search: ', max_length=50)
Und hier ist meine Ansichten Code:
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,
})
Aber das gibt mir den Fehler:
Caught an exception while rendering: 'unicode' object has no attribute 'get'
Wie kann ich den Anfangswert übergeben? Verschiedene Dinge, die ich versucht habe, scheinen den Parameter request.POST zu stören.
Der Fehler wird durch eine Unicode-Objekt anstelle eines dict vorbei. (dict definiert 'get()', aber string/unicode nicht. – spookylukey
Ah, ausgezeichneter Punkt. Ich habe den Fehler gesehen, aber die Verbindung nicht hergestellt! – cethegeek
Danke für die ausführlichen Kommentare und die Lösung. Ich hatte es auf diese Weise implementiert, weil ich wollte, dass die Ergebnis-URLs wie/search/query aussehen (ich weiß, dass es dabei Probleme gibt und sie möglicherweise überarbeiten). Ich umadressiere nach dem POST, also gibt es kein Problem mit der Zurück-Taste. – AP257