2017-02-22 1 views
0

Ich verwende das django-Webframework, um eine Kalenderwebseite zu erstellen. Ich habe ein paar Knöpfe auf der Seite und eine Schaltfläche "Weiter" und "Zurück", dass ich die Werte einiger Dinge in einer Ansicht ändern möchte.So führen Sie eine Ansicht basierend auf Informationen auf der aktuellen Seite erneut aus

Die Änderung der Werte hängt davon ab, was sich gerade auf der Seite befindet. Daher habe ich Ajax verwendet, um Informationen von der Seite zu erhalten und sie an die Ansicht zu senden. Hier ist die Ansicht:

def holiday(request): 
    if request.is_ajax():  
     # find out if next or previous has been clicked 
     request_type = request.GET['type']    
     if request_type == "next": 
      response_data = {} 

      # calculate new month and year based off current month and year from view 

      year = a_new_year 
      month = a_new_month 

     if request_type == "previous": 

      #same again 

    else: 
     # page loaded for first time use current date 
     date_today = datetime.now() 
     year = date_today.year 
     month = date_today.month 

    my_holidays = Holiday.objects.order_by('start_date').filter(
     Q(start_date__year=year, start_date__month=month) | Q(end_date__year=year, end_date__month=month) 
    ) 
    cal = HolidayCalendar(my_holidays, request.user).formatmonth(year, month) 

    context = { 
     "calendar": mark_safe(cal), 
    } 

    return render(request, "tande/calendar.html", context) 

Und dann habe ich diese Ajax

$('#next').click(function() { 
    $.ajax({ 
     url: "{% url 'tande:holiday' %}", 
     method: 'GET', 
     data: { 
      current: $('th.month').html(), 
      type: "next" 
     }, 
     success : function (json) { 
      console.log("hello");   
     } 
    }); 
}); 

Im Grunde ist dies nicht funktioniert, weil die Antwort hier nur die HTML für die Seite ist.

Wie kann ich die Ansicht mit 1) Informationen aus der Vorlage ausgeführt werden - es ist der Inhalt eines Tabellenkopf 2) Informationen darüber, welche Taste drückte ich - ich brauche die ID der Schaltfläche

und es bekommen rendern?

+0

Ich verstehe nicht, was du meinst. Du * renderst * die Seite neu; aber Ihre Ajax-Erfolgsmethode tut nichts mit der zurückgegebenen Antwort, also geht es nirgendwohin. –

+0

Ja - im Grunde weiß ich nicht, was ich jetzt tun soll. Ich habe es geschafft, Daten an die Ansicht zu senden - das Zeug, das ich brauche. Und führe die Aussicht. Ich nehme an, die Frage ist, was mache ich jetzt, um die Seite zu aktualisieren? @DanielRoseman –

+0

Nun, wenn Sie möchten, dass die Seite vollständig aktualisiert wird, weiß ich nicht, warum Sie überhaupt Ajax verwenden; Mach einfach die Monate normale Links. Andernfalls muss Ihre Erfolgsfunktion das Ergebnis mit jQuery in den HTML-Code der vorhandenen Seite einfügen. –

Antwort

-1

Sie können die Dinge im HTML nur mit Django dynamisch ändern. Sie müssen JavaScript dafür verwenden. Sie können django-serializer verwenden, um die Daten zu verwalten und dann eine Nachbearbeitung Ihres Front-Ends durchzuführen.

  1. Die Seite mit einer Frond-End-Sprache neu erstellen (Javascript);

OR

  1. die Seite neu laden (F5).
+0

Kann ich die Seite mit JavaScript neu laden? wie eine F5-Presse nachzuahmen, ohne dass der Benutzer dies tun muss? –

+0

Ja, du kannst. Es wird nicht wirklich benutzerfreundlich sein, aber es wird den Job machen. Später können Sie etwas wie ReactJS und andere ausgefallene Bibliotheken implementieren. : o) Oder du kannst es tun, wie Daniel es oben kommentiert hat. –

Verwandte Themen