2016-09-16 4 views
1

Ich arbeite mit Django, um eine ziemlich einfache Webanwendung zu machen.Django - Erhalte Daten von einem Formular, das kein django.form ist

Ich versuche derzeit, eine Folge von Formularen zu haben, so dass der Benutzer die Informationen Bits für Bit vervollständigt. Ich habe zuerst versucht, es nur in HTML zu tun, weil ich wirklich die Hand auf der Präsentation haben wollte. Hier ist mein Code.

Ich habe zwei Vorlagen, create_site.html und create_cpe.html. Ich brauche Informationen von der ersten Seite, um zu wissen, was ich auf der zweiten Seite fragen soll.

Hier ist meine create_site.html

<body> 

<form action="{% url 'confWeb:cpe_creation' %}" method="post" class="form-creation"> 
    {% csrf_token %} 
    <div class = "form-group row"> 
     <label for="site_name" class="col-xs-3 col-form-label">Name of theSite</label> 
     <div class="col-xs-9"> 
      <input id="site_name" class="form-control" placeholder="Name" required="" autofocus="" type="text"> 
     </div> 
    </div> 
<button class="btn btn-lg btn-primary btn-block" type="submit">Créer</button> 
</form> 
</body> 

Und hier ist die views.py, die ich bin mit all dies zu tun:

def site_creation(request): 

    template = loader.get_template('confWeb/create_site.html') 
    return HttpResponse(template.render(request)) 

def cpe_creation(request): 
    if request.method == "POST" : 
     print(request.POST) 

Was ich tun möchte, ist Erhalte den Wert der Eingabe meines Formulars in meiner Ansicht "cpe_creation". Ich habe versucht, Informationen aus dem "Anfrage" -Objekt zu bekommen, aber das habe ich nicht geschafft. Vielleicht fehlen mir sehr grundlegende HTML-Kenntnisse, aber ich dachte, die Formularinformationen würden im Anfragetext enthalten sein, aber es war nicht (oder sah nicht so aus).

Ich habe auch versucht mit Django Formen, aber das Problem ist, kann ich nicht sehr genau kontrollieren, wie die Form aussehen wird. Wenn ich eine Eingabe erstelle, kann ich ihr nicht sagen, wie groß sie sein soll oder so.

Daher sind meine Fragen die folgenden: - Wie kann ich die Daten aus dem übermittelten Formular erhalten? - Muss ich es mit Djangos Formen machen? Wenn ich das tue, wie kann ich die CSS-Klasse einer Eingabe steuern?

Antwort

3

Ihr Feld in Ihrem Formular in Ihrer Vorlage muss ein Namensattribut haben, um es an Ihre Anfrage zu übergeben.

Dann können Sie es so aus Ihrer Sicht bekommen:

site_name = request.POST.get('site_name')

+0

Danke, es war genau das, was ich gesucht habe. Beim Erstellen des Formulars sah ich, dass es am besten war, die Parameter "for" und "id" zu verwenden, damit "label" und "input" zusammengehören. Ist es wirklich notwendig? (Weil ich fühle, dass sowohl Name als auch ID zu viel ist) – Licia

+1

ID ist nicht erforderlich, Name ist erforderlich. Es ist gut, beides zu haben – sebb

1

Ihr Formularfeld muss ein Namensattribut.

  <input id="site_name" name="site_name" class="form-control" placeholder="Name" required="" autofocus="" type="text"> 

Alternativ, wenn Sie Django-Formulare verwenden möchten, können Sie die CSS-Klasse von einem Formularfeld festlegen, indem Sie das Widget explizit zu definieren.

class SiteForm(forms.Form): 
    site_name = forms.CharField(widget=forms.TextInput(attrs={'class': 'form-control'})) 

aus der Klasse zu urteilen form-control, ich nehme an, Sie Bootstrap verwenden möchten. Check out django-crispy-forms, die es wirklich einfach macht Django Formen mit Bootstrap.

Verwandte Themen