0

私はUpgradeViewdjango管理者と同じように保存する可能性があります。保存保存して編集を続けるか、保存して新しいオブジェクトを作成できます。

それぞれが異なるビューにつながります:

DetailViewUpdateViewおよびCreateView.

保存した後、すべてのビューまたはテンプレートにつながるメッセージを表示したいと思います。たとえば、「正常に保存されました」または「オブジェクトを保存できませんでした」などです。

カスタム テンプレート タグを作成するときは、タグを作成した後、他のビューにメッセージを渡す方法、場所、タイミングがわからないため、非常に難しくなっています。

これが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 %}

session を使用してこれらのビューメッセージを渡す方法と場所は?

4

2 に答える 2

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 に答える