021 Django Message
Djangoproject Introduction
https://docs.djangoproject.com/en/1.8/ref/contrib/messages/#using-messages-in-views-and-templates
Adding a message¶
add_message(request, level, message, extra_tags='', fail_silently=False)[source]¶
To add a message, call:
from django.contrib import messages
messages.add_message(request, messages.INFO, 'Hello world.')
Some shortcut methods provide a standard way to add messages with commonly used tags (which are usually represented as HTML classes for the message):
messages.debug(request, '%s SQL statements were executed.' % count)
messages.info(request, 'Three credits remain in your account.')
messages.success(request, 'Profile details updated.')
messages.warning(request, 'Your account expires in three days.')
messages.error(request, 'Document deleted.')
Displaying messages¶
get_messages(request)[source]¶
In your template, use something like:
{% if messages %}
<ul class="messages">
{% for message in messages %}
<li{% if message.tags %} class="{{ message.tags }}"{% endif %}>{{ message }}</li>
{% endfor %}
</ul>
{% endif %}
将这一段拷贝到 base.html
Bootstrap Introduction
通过http://getbootstrap.com/components/#alerts添加alert特性
几种常见的alert

Template – display message
下面在template添加一个dismissible alert
Base.html (src\templates)
{% if messages %}
<div class='container'>
<div class='alert alert-success text-center alert-dismissible'>
<button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">×</span></button>
{% for message in messages %}
<p{% if message.tags %} class="{{ message.tags }}"{% endif %}>{{ message }}</p><br/>
{% endfor %}
</div>
</div>
{% endif %}
Settings – configure message application
确保INSTALLED_APPS已包含改APP django.contrib.messages
# Application definition
INSTALLED_APPS = (
#django app
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
#third party apps
'crispy_forms',
'registration',
#my apps
'newsletter',
)
View – add message
下面列举在各个APP中对message的使用
Views.py (src\carts)
from django.contrib import messages
class CheckoutFinalView(CartOrderMixin, View):
def post(self, request, *args, **kwargs):
order = self.get_order()
order_total = order.order_total
nonce = request.POST.get("payment_method_nonce")
if nonce:
result = braintree.Transaction.sale({
"amount": order_total,
"payment_method_nonce": nonce,
"billing": {
"postal_code": "%s" %(order.billing_address.zipcode),
},
"options": {
"submit_for_settlement": True
}
})
if result.is_success:
#result.transaction.id to order
order.mark_completed(order_id=result.transaction.id)
messages.success(request, "Thank you for your order.")
del request.session["cart_id"]
del request.session["order_id"]
else:
messages.success(request, "%s" %(result.message))
return redirect("checkout")
return redirect("order_detail", pk=order.pk)
Views.py (src\orders)
from django.contrib import messages
class AddressSelectFormView(CartOrderMixin, FormView):
def dispatch(self, *args, **kwargs):
b_address, s_address = self.get_addresses()
if b_address.count() == 0:
messages.success(self.request, "Please add a billing address before continuing")
return redirect("user_address_create")
elif s_address.count() == 0:
messages.success(self.request, "Please add a shipping address before continuing")
return redirect("user_address_create")
else:
return super(AddressSelectFormView, self).dispatch(*args, **kwargs)
Views.py (src\products)
from django.contrib import messages
class VariationListView(StaffRequiredMixin, ListView):
def post(self, request, *args, **kwargs):
formset = VariationInventoryFormSet(request.POST, request.FILES)
if formset.is_valid():
formset.save(commit=False)
for form in formset:
new_item = form.save(commit=False)
#if new_item.title:
product_pk = self.kwargs.get("pk")
product = get_object_or_404(Product, pk=product_pk)
new_item.product = product
new_item.save()
messages.success(request, "Your inventory and pricing has been updated.")
return redirect("products")
raise Http404
效果图

浙公网安备 33010602011771号