2

RequestContext を django リダイレクト関数またはその他のコンテキストに含める方法があるかどうか疑問に思っています。

問題は、オブジェクトが作成された後にメッセージを追加する必要があるということですが、メッセージ フレームワークでは、RequestContext が機能するか、メッセージを返す別のコンテキストが必要です。コンテキストを返すにはどうすればよいですか?

私の見解:

@permission_required('spaces.add_space')
def create_space(request):

    """
    Returns a SpaceForm form to fill with data to create a new space. There
    is an attached EntityFormset to save the entities related to the space. Only
    site administrators are allowed to create spaces.

    :attributes: - space_form: empty SpaceForm instance
                 - entity_forms: empty EntityFormSet
    :rtype: Space object, multiple entity objects.
    :context: form, entityformset
    """
    space_form = SpaceForm(request.POST or None, request.FILES or None)
    entity_forms = EntityFormSet(request.POST or None, request.FILES or None,
                                 queryset=Entity.objects.none())

    if request.user.is_staff:    
        if request.method == 'POST':
            space_form_uncommited = space_form.save(commit=False)
            space_form_uncommited.author = request.user

            if space_form.is_valid() and entity_forms.is_valid():
                new_space = space_form_uncommited.save()
                space = get_object_or_404(Space, name=space_form_uncommited.name)

                ef_uncommited = entity_forms.save(commit=False)
                for ef in ef_uncommited:
                    ef.space = space
                    ef.save()

                # We add the created spaces to the user allowed spaces
                request.user.profile.spaces.add(space)

                # This message does not work since there's no context.
                messages.info(request, 'Space %s created successfully.' % space.name)

                return redirect('/spaces/' + space.url)

        return render_to_response('spaces/space_add.html',
                              {'form': space_form,
                               'entityformset': entity_forms},
                              context_instance=RequestContext(request))
    else:
        return render_to_response('not_allowed.html',
                                  context_instance=RequestContext(request))
4

2 に答える 2

2

メッセージを保存するのに RequestContext は必要ありません。必要なのは表示だけです。あなたのコードはどのように機能しませんか? メッセージはデータベースに追加され、リダイレクト後に表示できるようになります。

于 2011-07-20T16:25:47.130 に答える
0

私は同じ質問をしましたが、それが「うまくいく」ことを明確にしたいだけです

def first_view(request)
    ...
    messages.info(request, "Some info message")
    ...
    return redirect('second_view')

def second_view(request)
    ...
    return render_to_response('template.html',{},context_instance=RequestContext(request))

    -> will correctly display the message
于 2011-11-03T13:50:14.403 に答える