2016-06-05 15 views
0

Ich bin ziemlich neu in Django und Web-Entwicklung im Allgemeinen, so dass ich immer noch versuche, viele dieser Ideen zu konzipieren.Django Einreichung Formular Aktion basierend auf was ausgewählt wurde

Was ich schwer verstehen kann, ist, wie man ein HTML-Formular-Aktionsattribut korrekt anwendet, wenn man auf "Senden" klickt, basierend auf dem, was ich in Auswahl-/Dropdown-Boxen ausgewählt habe.

Zum Beispiel, wenn ein Benutzer in einer Dropdown-Box ein Auto auswählen würde (oder in meinem Beispiel trimmen), dann klickte ich auf den Go-Button, ich möchte dann den Benutzer auf eine neue Seite mit Informationen über die Autoverkleidung. Hier ist, was ich habe:

Vorlage

\t <!-- Bar of dropdowns for searching. --> 
 
\t <div class="container-fluid"> 
 
\t \t <form action="" method="get" class="form-inline" id="dropdownText"> 
 
\t \t \t <div class="form-group" id="dropdownGroup"> 
 

 
\t \t \t \t <span style="display:inline-block" class="selectBox"> 
 
\t \t \t \t \t <select class="form-control" id="make"> 
 
\t \t \t \t \t \t <option value='empty'></option> 
 
\t \t \t \t \t \t <!-- List each make's name. --> 
 
\t \t \t \t \t \t {% for make in allMakes %} 
 
\t \t \t \t \t \t <option value="{{ make.id }}">{{ make.name }}</option> 
 
\t \t \t \t \t \t {% endfor %} 
 
\t \t \t \t \t </select> 
 
\t \t \t \t \t <label for="make" style="display:block">Make</label> 
 
\t \t \t \t </span> 
 

 
\t \t \t \t <span style="display:inline-block" class="selectBox"> 
 
\t \t \t \t \t <select class="form-control" id="model" disabled> 
 
\t \t \t \t \t \t <!-- List each make's model's name. --> 
 
\t \t \t \t \t </select> 
 
\t \t \t \t \t <label for="model" style="display:block">Model</label> 
 
\t \t \t \t </span> 
 

 
\t \t \t \t <span style="display:inline-block" class="selectBox"> 
 
\t \t \t \t \t <select class="form-control" id="trim" disabled> 
 
\t \t \t \t \t \t <!-- List all trims for each make/model. --> 
 
\t \t \t \t \t </select> 
 
\t \t \t \t \t <label for="trim" style="display:block">Trim</label> 
 
\t \t \t \t </span> 
 

 
\t \t \t </div> 
 
\t \t </form> 
 
\t \t <form action="" id="trimDetail"> 
 
\t \t \t <div class="text-center"> 
 
\t \t \t \t <button type="submit" class="btn btn-default" id="go">GO!</button> 
 
\t \t \t </div> 
 
\t \t </form> 
 
\t </div>

Wie es aussieht

http://puu.sh/phaHG/105ed07b28.png

DetailV iew für das Auto trimmen

class DetailView(generic.DetailView): 
    model = Trim 
    template_name = 'search/detail.html' 

URL, die der Ansicht

url(r'^(?P<pk>\d+)/$', DetailView.as_view(model=Trim, 
template_name='search/detail.html')), 

Bei der Auswahl der Trimm und klicken unterwegs entsprechen wird, wird die Seite einfach aufgefrischt mit der URL Wechsel zu:

"/? TrimId = 4"

, die trimId ändert sich je nachdem, was der Benutzer ausgewählt hat, sendet aber nicht m zu der Vorlage, die die Informationen für die ID anzeigt.

Ich kann dies durch einfaches Ändern der Formularaktion mit jQuery beim Klicken auf die Schaltfläche machen, aber ich war mir nicht sicher, ob dies eine schlechte Übung war, und ich möchte die richtige Django-Methode lernen.

Meine jQuery Art und Weise tun:

var $elTrim = $('select#trim'); // The trim select box. 
var $trimForm = $('form#trimDetail'); // The form around the button. 

function updateAction(){ 

    if($elTrim.find('option:selected').val() != 'empty'){ 
     $trimForm.attr('action', $elTrim.val()); 
    } 

} 

$elTrim.change(updateAction); 
+0

Ich habe die Art und Weise, wie ich es mit jQuery gemacht habe, hinzugefügt, aber ich war mir nicht sicher, ob dies der "richtige" Weg war oder ob es keine gute Übung war. Mir war nicht bewusst, dass dies kein Django-Problem ist. – sidp

+0

Oh, ich war verwirrt, was Sie gefragt haben, wie Sie das "run snippet" geklickt haben könnte, um den HTML-Code zu sehen ... – sidp

+0

nicht funktioniert es nicht. Stackoverflow-Lauf-Snippet rendert keine Django-TMplates – e4c5

Antwort

0

Dies ist kein guter Weg, es zu tun. Ihre Suchseite sollte immer an denselben Ort gesendet werden. Diese Seite kann dann dafür verantwortlich sein, entweder die Ergebnisse direkt anzuzeigen oder Sie auf die entsprechende Seite umzuleiten.

+0

Ich bin mir nicht sicher, ob ich vollständig verstehe, was Sie meinen.Was auf der Suchseite mit dem Feld "trimmen" markiert ist, ändert die Formularaktion der Schaltfläche, die dann zur richtigen URL für die gewählte ID gelangen kann. Was ist der richtige Weg, dies zu tun? – sidp

+0

Ich habe es dir gesagt. Senden Sie das Formular an eine einzelne "Such" -Seite und leiten Sie in dieser Ansicht auf die Seite "trimmen" um, die diese ID weitergibt. –

+0

Ah, ich verstehe. Ich muss nur herausfinden, wie ich das richtig machen kann. Ich habe es schwer zu verstehen, wie Views funktionieren und mit den Vorlagen/URLs interagieren, vor allem in Bezug auf "get" und "post" und funktionsbasierte vs. Klassen. – sidp

Verwandte Themen