0

我有一个UpgradeView与 django 管理员一样的保存可能性。我可以保存保存并继续编辑保存并创建一个新对象

每个导致不同的观点:

DetailView,UpdateViewCreateView.

保存后,我想在每个视图或模板上发出一条消息。例如“成功保存”“无法保存对象”。

编写自定义模板标签对我来说变得非常困难,因为在我创建标签之后,我不知道如何、在何处以及何时将消息传递给其他视图。

这就是UpdateView我来自的地方。

class TopicEditView(UpdateView):
    fields = ['title','description',]
    model = Topic
    ...
    def get_success_url(self):
        if   self.request.POST.get('save'):
            return reverse('topic_detail', kwargs={'pk':self.object.pk})
        elif self.request.POST.get('save_and_continue'):
            return reverse('topic_edit', kwargs={'pk':self.object.pk})
        elif self.request.POST.get('save_and_create_new'):
            return reverse('topic_create')
        else:
            return reverse('fallback_success_url')

我的自定义模板标签仍然是空的,因为我看到的唯一示例对我来说很难理解。

@register.inclusion_tag('msg.html', takes_context=True)
def get_msg(context):
    return None

在里面'msg.html'我只有字符串说“成功保存”,这确实没有任何结果,我忘记了我为什么这样做。

这是在我的模板中(什么都没有):

{% load msg_handler %}
{% get_msg %}

如何以及在何处使用会话将消息传递这些视图

4

2 回答 2

2

请尝试使用 Django 消息框架:

http://docs.djangoproject.com/en/1.8/ref/contrib/messages

于 2015-07-03T16:09:51.777 回答
0

我完成的速度比我想象的要快。这是我的自定义模板标签:

@register.simple_tag(takes_context=True)
def get_msg(context):
    try:
        return context.request.session.pop('msg')
    except KeyError:
        return ''

这是我的观点,传递信息:

class TopicEditView(UpdateView):
    ...
    def get_success_url(self):
        self.request.session['msg']='Successfully saved!'
        ...

我的模板没有任何变化。

如果有更优雅/有用的方式,我将不胜感激。

编辑 :

感谢 Lorenzo Peña 的评论,我尝试使用非常易于使用的消息框架!

首先我再次访问了我的views.py并导入了messages

from django.contrib import messages

并改变了这一行

self.request.session['msg']='Successfully saved!'

对此:

messages.add_message(self.request, messages.SUCCESS, 'Successfully saved!')

然后我制作了一个名为 msg_loader.html 的新模板,其中包含:

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

并在我的其他模板中更改了这个

{% load msg_handler %}
{% get_msg %}

对此

{% include "msg_loader.html" %}
于 2015-07-01T13:51:24.213 回答