0

我已经有一个巨大的 index.html,它来自我的索引控制器中定义的东西。我有另一个页面进行一些处理,如果它成功,我想再次呈现 index.html,但添加的数据让我的视图知道状态是成功的。但是,我还需要context在视图中显示的所有信息才能显示。无需重复让我的数据字典传递到 index.html 的好方法是什么contextdef process(request):谢谢

def index(request):
    context = RequestContext(request)
    context['something'] = 'something'
    # much much more
    return render_to_response('index.html', context)

def process(request):
    data['status'] = 'success'
    return ??? ('index.html', context, data?)
4

2 回答 2

0

一种简单的解决方案可能是将一些数据添加到您的会话中,然后重定向回您的索引视图:

from django.shortcuts import redirect

def index(request):
    context = RequestContext(request)
    context['something'] = 'something'
    # much much more

    if 'success' in request.session:
        context['success'] = request.session['success']
        del(request.session['success'])

    return render_to_response('index.html', context)

def process(request):
    request.session['status'] = 'success'
    return redirect("name-of-index-view")

从 OP 编辑​​:就我而言,我只希望状态保存一次,而不是在整个会话中持续,所以def index我在里面放了:

try:
    context["status"] = request.session['status']
    del request.session['status']
except KeyError:
    context["status"] = 'fail'
于 2015-01-28T00:25:11.353 回答
0

将数据生成提取到一个函数并从两个视图中调用此函数:

def _get_context(request):
    context = RequestContext(request)
    context['something'] = 'something'
    # much much more
    return context

def index(request):
    return render_to_response('index.html', {}, _get_context(request))

def process(request):
    data['status'] = 'success'
    return render_to_response('index.html', {'status': 'success'},
                                            _get_context(request))

旁注:考虑使用render而不是render_to_response.

于 2015-01-28T00:25:19.487 回答