2012-07-20 11 views
5

Soll ich die nächste Konstruktion verwenden?Wie bekomme ich den Wert aus der Dropdown-Box django?

def PageObjects(request): 
    q = bla_bla_bla(bla_bla) 
    answer = request.POST['value'] 


<form action="PageObjects" method="get"> 
     <select > 
     <option selected="selected" disabled>Objects on page:</option> 
     <option value="10">10</option> 
     <option value="20">20</option> 
     <option value="30">30</option> 
     <option value="40">40</option> 
     <option value="50">50</option> 
     </select> 
     <input type="submit" value="Select"> 
    </form> 

Wie kann ich dieses Problem lösen? Was muss ich schreiben?

Antwort

2

Ich würde empfehlen, Ihre Daten mit der Post zu senden:

<form action="PageObjects" method="post"> 
    <select > 
    <option selected="selected" disabled>Objects on page:</option> 
    <option value="10">10</option> 
    <option value="20">20</option> 
    <option value="30">30</option> 
    <option value="40">40</option> 
    <option value="50">50</option> 
    </select> 
    <input type="submit" value="Select"> 
</form> 

Und Sie sollten zugreifen Ihre Formularwerte durch das cleaned_data Wörterbuch:

def page_objects(request): 
    if request.method == 'POST': 
    form = YourForm(request.POST) 

    if form.is_valid(): 
     answer = form.cleaned_data['value'] 

ich wirklich empfehlen, die Django-Dokumentation lesen:

https://docs.djangoproject.com/en/1.4/topics/forms/#using-a-form-in-a-view

+0

Ich antwortete Benutzer Paritosh Singh über mein Problem. Wie kann ich es reparieren, wenn ich deine Empfehlung verwende? –

+0

@MaxL Sie sollten wirklich guten HTTP-Praktiken folgen, wenn Sie entscheiden, ob Sie 'POST' oder' GET' verwenden. Hier ist ein guter Artikel, um zu entscheiden, welche Methode zu Ihrem Szenario passt http://stackoverflow.com/questions/46585/when-do-you-use-post-and-when-do-you-use-get. Aber ich glaube definitiv nicht, dass es hier genug Informationen gibt, um eins über das andere zu sagen. –

+1

@AustinA Danke für den Rat, aber ich fragte diese Frage vor 2 Jahren :) Jetzt habe ich mehr Erfahrung :) –

6

einen Namen zu Tag geben, wie

<select name="dropdown"> 
    <option selected="selected" disabled>Objects on page:</option> 
      <option value="10">10</option> 
      <option value="20">20</option> 
      <option value="30">30</option> 
      <option value="40">40</option> 
      <option value="50">50</option> 
    </select> 

Zugang in Ansicht wie

def PageObjects(request): 
    q = bla_bla_bla(bla_bla) 
    answer = request.GET['dropdown'] 
+0

und kann ich die GET-Methode verwenden? erklären Sie mir, wie es den Wert von der Dropbox zu meinem view.py sendet? –

+0

es hängt von der Formularmethode ab, die Sie verwenden, wenn Sie

verwenden, können Sie GET verwenden, sonst verwenden Sie POST. Wenn Sie möchten, dass auf beliebige (GET oder POST) zugegriffen wird, verwenden Sie REQUEST. –

+0

In Ihrem Fall sollten Sie GET verwenden, siehe Änderungen in der Antwort –

0

eine Datei forms.py innerhalb von 'your_app_folder' machen

in forms.py:

class FilterForm(forms.Form): 
    FILTER_CHOICES = (
     ('time', 'Time'), 
     ('timesince', 'Time Since'), 
     ('timeuntil', 'Time Untill'), 
    ) 

    filter_by = forms.ChoiceField(choices = FILTER_CHOICES) 

in views.py

from .forms import FilterForm 

def name_of_the_page(request): 
form = FilterForm(request.POST or None) 
answer = '' 
if form.is_valid(): 
    answer = form.cleaned_data.get('filter_by') 
    // notice `filter_by` matches the name of the variable we designated 
    // in forms.py 
0 mit dem Attribut ausgewählt, wenn Sie das Formular abgesendet haben, in Ihrem views.py Datei, die Sie mit der Linie

<tr><th><label for="id_filter_by">Filter by:</label></th><td><select id="id_filter_by" name="filter_by" required> 
<option value="time" selected="selected">Time</option> 
<option value="timesince">Time Since</option> 
<option value="timeuntil">Time Untill</option> 
</select></td></tr> 

Hinweis das Optionsfeld die Daten aus selected Attribut greifen:

diese Form wird die folgende html generieren

answer = form.cleaned_data.get('filter_by') 
Verwandte Themen