2016-03-23 7 views
1

Ich habe ein Formular generiert, das eine Eingabe vom Benutzer nimmt, ich mache eine Abfrage basierend auf der Eingabe und speichert die Ergebnisse der Abfrage in einer Variablen data. Ich möchte eine Seite (display.html) rendern, die die Daten in der Variablen data anzeigt.
Wie soll ich die URL definieren, die zu display.html zugeordnet werden soll?
Muss ich eine separate Ansicht für display.html definieren? Wenn ja, wie kann ich die Variable data an die neue Ansicht übergeben?
Was ist die richtige Methode, um dies zu erreichen?
Dies ist meine views.py Datei, Griffe Display Funktion die Form und seine EingabeAbfragen basierend auf Eingabe über Formular und Anzeige des Ergebnisses

def displayform(request,user_pk): 
    user=User.objects.get(id=user_pk) 
    if request.user.is_active and request.user.id==user.id: 
     if request.user.is_authenticated(): 
      if request.POST: 
       form=InpurDateForDisplay(request.POST) 
       if form.is_valid(): 
        dd=form.cleaned_data['dd'] 
        mm=form.cleaned_data['mm'] 
        yy=form.cleaned_data['yy'] 
        data=user.link_set.filter(date=datetime.date(day=dd,month=mm,year=yy)) 
        return render_to_response('app1/display.html',{'data':data,}) 
      else: 
       form=InpurDateForDisplay() 
      return render(request,'app1/displayform.html',{'form':form,}) 
    else: 
     return render(request,'app1/error.html') 
+0

Ihre Frage ist nicht klar. Eine Ansicht benötigt nur eine URL. Welches genaue Problem hast du? –

+0

Beim Schreiben der URL für die Ausgabeseite (display.html): In welcher Ansicht soll ich die URL zuordnen? –

+0

Ich löste das Problem, ich verwendete einen DateTimeField-Feldtyp und meine Abfrage lieferte einen DateField-Feldtyp. Ich habe den Fehler mit dem URL-Zuordnungsproblem verwechselt. Jetzt habe ich Ihren Punkt, ich brauche keine andere URL für display.html, es wird bereits aus einer Ansicht gerendert, in der das Formular generiert wird. Danke :) –

Antwort

0

Django hat eine Reihe von generischen Ansichten für zeitbasierte Anzeige von Inhalten: Generic date views.

Wenn Sie keine Änderungen an Modellen vornehmen, sollten Sie GET-Parameter verwenden, um die Ergebnisse zu filtern, die Sie zurückgeben.

Etwas wie:

def displayform(request, user_pk): 
    user=User.objects.get(id=user_pk) 
    if request.user.is_active and request.user.id==user.id: 
     if request.user.is_authenticated(): 
      date = request.GET.get('date', None) 
      links = user.link_set.all() 
      if date: 
       date = datetime.datetime.strptime(date, <your date format>).date() 
       links = links.filter(date=date) 
      return render_to_response('app1/display.html',{'data':links, 
              'form': InpurDateForDisplay()}) 

    else: 
     return render(request,'app1/error.html') 
+0

Ich werde durch die generischen Datumsansichten gehen, sobald ich aus diesem Durcheinander komme. Vielen Dank :) –

Verwandte Themen