zoukankan      html  css  js  c++  java
  • 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 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      
    

    效果图

     

  • 相关阅读:
    java中eclipse控制台接受输入的方法
    java中Timer类的详细介绍(详解)
    java中Timer类的详细介绍(详解)
    java中Timer类的详细介绍(详解)
    java中Timer类的详细介绍(详解)
    java中ReentrantLock类的详细介绍(详解)
    java中ReentrantLock类的详细介绍(详解)
    java中ReentrantLock类的详细介绍(详解)
    java中ReentrantLock类的详细介绍(详解)
    Spring中WebApplicationInitializer的理解
  • 原文地址:https://www.cnblogs.com/2dogslife/p/6477016.html
Copyright © 2011-2022 走看看