【问题标题】:Django: Can I redirect with a data attachment to another page that was created by render_to_response with RequestContext?Django:我可以使用数据附件重定向到由 render_to_response 和 RequestContext 创建的另一个页面吗?
【发布时间】:2015-01-27 23:55:59
【问题描述】:

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

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?)

【问题讨论】:

    标签: python django render-to-response


    【解决方案1】:

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

    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

    【讨论】:

      【解决方案2】:

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

      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'
      

      【讨论】:

      • 这在某些情况下可能有用,但我只想保存一次request.session['status']。我不希望它在整个会话中持续存在。
      • 没关系..我更新了你的帖子,而不是我放的东西。
      猜你喜欢
      • 1970-01-01
      • 2014-06-24
      • 2012-03-12
      • 1970-01-01
      • 1970-01-01
      • 2016-12-14
      • 2011-12-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多