私は、ユーザーが自分のアカウントに登録された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 %}
ページのテキストが追加されましたか?
messages.success
への変化からそれを変更するメッセージの属性ではありませんので、あなたはまた、その特定のエラーを取得している 'messages.book_message'は'私がされている ' –