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      

 

效果图

 

 

posted on 2017-02-27 23:45  汪汪家园  阅读(186)  评论(0编辑  收藏  举报