Djangoroidの奮闘記

python,django,angularJS1~三十路過ぎたプログラマーの奮闘記

Django e-commerce part21 Django Messages

Displaying messages

公式サイト:

The messages framework | Django documentation | Django

base.html に挿入する。

include navbar の下あたりでいいと思われる。

{% if messages %}
<ul class="messages">
    {% for message in messages %}
    <li{% if message.tags %} class="{{ message.tags }}"{% endif %}>{{ message }}</li>
    {% endfor %}
</ul>
{% endif %}

views.pyを修正する。

このままだと、inventory のextra=1の新規登録フォームが空欄でエラーが出てしまうので、以下の通り修正してみる。

    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: #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, "在庫の状況が更新されました")
            return redirect("products")
        raise Http404

base.htmlのメッセージをbootstrap風に修正する。

{% if messages %}
<div class='container'>
    <div class='alert alert-success text-center'>
    {% for message in messages %}
        <p{% if message.tags %} class="{{ message.tags }}"{% endif %}>{{ message }}</p><br/>
    {% endfor %}
    </div>
</div>
{% endif %}

base.htmlをさらに、修正する。

{% 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">&times;</span></button>
    {% for message in messages %}
        <p{% if message.tags %} class="{{ message.tags }}"{% endif %}>{{ message }}</p><br/>
    {% endfor %}
    </div>
</div>
{% endif %}