2017-03-19 7 views
2

私は、ユーザーが自分のアカウントに登録されたPlayerオブジェクトのイベントの予約を行うことができるシステムを開発中です。以前はシステムを正常にホームページにリダイレクトしていましたが、予約が成功したときにツールチップスタイルのポップアップを実装しようと決心しました。django.contrib.messagesを使用して表示するDjango Successメッセージ

私はこのためにいくつかのことを試しましたが、誰も私のためにはうまくいきませんでした。最初に、私のrenderコマンドで "message = 'Booking Successful。'を追加しようとしました.HTMLテンプレート内のスクリプトと共に。これは私に "render()に予期しないキーワード引数 'message'があります"

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

これは技術的に動作しますが、メッセージは非常に適切ではありませんページの読み込みに表示されます。

は、それから私は、レンダリング要求が読み込むように私のフォームの後にコンテキスト辞書に追加してみました。

最後に、下のコードに示すようにDjangoメッセージ関数を呼び出しました。このコードは、ページをロードするときに空のメッセージボックスをポップアップします。ブックボタンをクリックすると、完全なスタックトレースを提供するエラーが表示されます。

EDIT:上記をすべて無視して、下記のコードは、予約の成功時にページにテキスト行を追加します。これは私が持っていたより優れていますが、可能ならばポップアップにしたいと思います。

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.successへの変化からそれを変更するメッセージの属性ではありませんので、

あなたはまた、その特定のエラーを取得している 'messages.book_message'は'私がされている ' –

答えて

1

Djangoには、プロジェクトに簡単に追加できる組み込みのメッセージアプリが付属しています。

Displaying messages to users in django とこのblog postのdjangoで応答メッセージを表示する方法についての簡単なチュートリアルについては、この部分をお読みください。 'book_message'モジュールはそうmessages.book_message

+0

messages.success'しますそれを使用しようとしたが、私が読んだドキュメンテーションのページから何も役に立たなかった。私は今あなたのリンクを見て、私はそれを動作させることができるかどうかを見て、ありがとう。 –

+0

さて、私はリンクしたチュートリアルを使用しました(とても役に立ちました、ありがたいです)。私は今、成功のためにテンプレートにテキスト行を出力するアプリケーションを持っています。代わりにこれをポップアップにすることはできますか?私のコードがどのように見えるかで質問が更新されました。 –

+0

ポップアップが必要な場合は、javascriptを使ってそれを行う必要があります。モーダルを見てください。 –

関連する問題