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 emplates)
{% 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 (srccarts)
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 (srcorders)
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 (srcproducts)
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
效果图