博客五部曲之一 - 简单博客


1269 浏览 5 years, 4 months

22 Django消息框架

版权声明: 转载请注明出处 http://www.codingsoho.com/

我们打算在一个表单更新成功之后显示一个成功提示的消息

def post_create(request):
    form = PostForm(request.POST or None)
    if form.is_valid():
        instance = form.save(commit=False)
        instance.save()
        messages.success(request, "successfully created")
        return HttpResponseRedirect(instance.get_absolute_url())
    else:
        messages.error(request, "not successfully created")
    context = {
        'form':form
    }
    return render(request, 'post_form.html', context)

在成功和失败的分支里,分别用message.success和message.error来显示错误消息。

要显示message,我们在post_detail.html里加入下面语句

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

更多关于message的细节可以参考下面文档 https://docs.djangoproject.com/en/1.11/ref/contrib/messages/

message里面有一个参数extra_tag,这个参数会添加到message的class里面。下面演示一下如何使用

在post_update的消息显示代码行,添加extra_tags “html_safe”,同时消息里面插入html代码

def post_update(request, id=None):
    instance = get_object_or_404(Post, id=id)    
    form = PostForm(request.POST or None, instance=instance)
    if form.is_valid():
        instance = form.save(commit=False)
        instance.save()
        messages.success(request, "<a href='# '>item</a> saved", extra_tags="html_safe")
        return HttpResponseRedirect(instance.get_absolute_url())
    context = {
        'form':form,
        "title" : instance.title,
        "instance" : instance
    }

    return render(request, 'post_form.html', context)

在post_form.html里添加关于这个tag的判断,如果包含html_save,那么message内容添加safe filter,以保证按HTML格式解释这段代码,否则它会将原生的HTML代码显示出来。

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