2017-03-19 2 views
2

Ich arbeite an einem System, das es einem Benutzer ermöglicht, eine Buchung für ein Ereignis für ein Player-Objekt zu platzieren, das für sein Konto registriert ist. Zuvor hatte ich das System zum Erfolg auf die Startseite umleiten, aber ich entschied mich zu versuchen, ein Tooltip Stil Pop-up zu implementieren, wenn die Buchung erfolgreich war.Django Success Nachricht in Sicht mit django.contrib.messages

Ich habe ein paar Dinge ausprobiert und keiner hat für mich funktioniert. Zuerst versuchte ich, "message = 'Booking Successful.'" In meinem Render-Befehl zusammen mit einem Skript in der HTML-Vorlage hinzuzufügen. Dies gab mir "render() hat eine unerwartete Keyword-Argument 'Nachricht'".

Dann versuchte ich hinzugefügt, um es auf den Kontext-Wörterbuch nach meiner Form, so dass der Antrag machen lautet:

return render(request, 'tennis/make_booking.html', {'event_form': event_form, 'message': 'Booking Successful'}) 

Diese technisch funktioniert, aber die Nachricht auf dem Laden der Seite angezeigt wird, die nicht ganz richtig ist.

Dann versuchte ich schließlich einen Anruf an die Django-Nachrichtenfunktion, wie in meinem unteren Code gezeigt. Dieser Code öffnet ein leeres Meldungsfeld, wenn ich die Seite lade, und wenn ich auf die Schaltfläche "Buch" klicke, erscheint ein Fehler, den ich mit der vollständigen Stack-Trace angeben kann.

EDIT: Ignoriere alle oben, Code unten fügt eine Zeile Text auf die Seite bei erfolgreicher Buchung. Das ist besser als ich, aber ich würde es gerne ein Pop-up, wenn möglich.

views.py

@login_required 
def make_booking(request): 
    form = EventForm() 

    if request.method == 'POST': 
     event_form = EventForm(request.POST) 
     print "HELLO" 
     if event_form.is_valid(): 
      print "VALID" 

      event = event_form.save(commit=False) 
      player = request.user.player_set.all()[0] 
      event.player = player 
      event.save() 
      # Consider rendering a different page 
      messages.success(request, 'Your booking was successful!', extra_tags='alert') 
     else: 
      # invalid form, print problems to terminal 
      print(event_form.errors) 
    else: 
     # not POST so render blank forms 
     event_form = EventForm() 
    return render(request, 'tennis/make_booking.html', {'event_form': event_form}) 

HTML-Vorlage:

{% extends 'tennis/base.html' %} 

{% block body_block%} 

    {% block title_block %} 
     Make a Booking 
    {% endblock %} 

    <body> 
     <h1> Book an Event </h1> 
     If booking is sucessful you will be redirected to the home page 
     <br> 
     <div> 
      <form id="event_form" method="post" action="/tennis/make_booking/"> 
       {% csrf_token %} 
       {% for hidden in event_form.hidden_fields %} 
        {{ hidden }} 
       {% endfor %} 
       {% for field in event_form.visible_fields %} 
        {{field.errors}} 
       {% endfor %} 
       <p>{{ event_form.event.label_tag }} {{ event_form.event }}</p> 
       <input type="submit" name="book" value="Book"/> 
      </form> 
     </div> 
     {% if messages %} 
      <ul class="messages"> 
       {% for message in messages %} 
        <li class="{{ message.tags }}">{{ message }}</li> 
       {% endfor %} 
      </ul> 
     {% endif %} 
    </body> 

{% endblock %} 

Wie kann ich diesen Code ändern, dass ich eine Erfolgsmeldung erhalten Aufspringen, wenn ich statt nur einer Linie mein Buch Schaltfläche klicken der Text auf der Seite hinzugefügt?

+0

Änderung '' messages.book_message' messages.success' ' –

Antwort

1

Django verfügt über eine integrierte Nachrichten-App, die Sie ganz einfach zu Ihrem Projekt hinzufügen können.

Lesen Sie diesen Teil der Dokumentation auf Displaying messages to users in django und auch diese blog post für ein kurzes Tutorial zur Verwendung der Anzeige von Antwortnachrichten in Django.

Sie auch, dass bestimmte Fehler bekommen, weil 'book_message' kein Attribut der Nachrichten ist Modul, um es so von messages.book_message

zu messages.success ändern
+0

Ich war Ich habe versucht, es zu benutzen, aber ich habe nichts Nützliches von den Dokumentationsseiten bekommen, die ich gelesen habe. Ich sehe mir jetzt deine Links an und schaue, ob ich es schaffen kann, danke. –

+0

Okay, ich habe das Tutorial verwendet, das Sie verlinkt haben (sehr nützlich, danke) und ich habe jetzt die Anwendung, die eine Textzeile bei Erfolg auf die Vorlage ausgibt. Wie kann ich stattdessen ein Pop-Up machen? Frage aktualisiert mit wie mein Code jetzt aussieht. –

+0

Wenn Sie ein Pop-up wollen, dann müssen Sie Javascript schreiben, um das zu tun, werfen Sie einen Blick auf Modals. –

Verwandte Themen