2017-03-19 62 views
2

我正在研究一個系統,該系統允許用戶針對註冊到其帳戶的Player對象的事件進行預訂。以前,我在成功時將系統重定向到主頁,但我決定試着在預訂成功時彈出一個工具提示樣式。Django Success使用django.contrib.messages發送消息

我已經嘗試了幾件事情,沒有人爲我工作。首先,我嘗試在我的渲染命令中添加「message ='Booking Successful。'」,以及html模板中的腳本。這給了我「render()有一個意想不到的關鍵字參數'message'」。

然後我試圖把它添加到語境詞典我的表格後,使得呈現請求寫着:

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

這種技術上的作品,但顯示在頁面加載這是不完全正確的消息。

然後最後我試着調用Django消息函數,如下面的代碼所示。這個代碼彈出一個空的消息框,當我加載頁面,當我點擊書本按鈕,它給了我一個錯誤,我會提供完整的堆棧跟蹤。

編輯:忽略以上所有代碼,下面的代碼在成功預訂時在頁面上添加了一行文本。這比我的要好,但如果可能的話,我希望它能彈出來。

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模板:

{% 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 %} 

如何修改這個代碼,這樣我得到一個成功的消息彈出,當我點擊我的書按鈕,而不是隻是一個線文本添加到頁面?

+0

的變化而變化'messages.book_message'到'messages.success' ' –

回答

1

Django帶有一個內置的消息應用程序,您可以輕鬆添加到您的項目中。

在Django中使用顯示響應消息上的快速教程Displaying messages to users in django 也是這個blog post閱讀文檔的這一部分。

你也越來越的特定錯誤,因爲'book_message'不是消息的屬性模塊,因此從messages.book_messagemessages.success

+0

我一直試圖使用它,但我沒有從我閱讀的文檔頁面中獲得任何有用信息。我剛纔看看你的鏈接,看看我能否成功,謝謝。 –

+0

好的,我使用了您鏈接的教程(非常有用,謝謝),現在我已經將應用程序在成功輸出一行文本到模板上。我怎樣才能讓這個彈出來呢?問題更新了我的代碼現在的樣子。 –

+0

如果你想要一個彈出窗口,那麼你將需要寫javascript來做到這一點,看看模態。 –