2011-06-01 22 views
0

在django中创建视图时,是否允许在POST数据中传递上下文?那就是:DJango在POST中作为上下文参数传递

def view(request): 
    #view operations here 
    #... 

    c = Context({ 
     'POST':request.POST, 
    }) 
    return render_to_response("/templatePath/", c, context_instance=RequestContext(request)) 

我的目标是维护已填充的字段中的数据,而不必将它们保存到数据库。也就是说,当您单击添加其他字段条目的选项时,您放入的数据会保留并自动填充到表单中。我觉得这可能是草率或可能不安全。这有什么理由是不好的或不安全的技术?有更好的方法来维护数据吗?

+0

无论如何,邮政将在上下文中? {{request.POST}} – JamesO 2011-06-01 14:09:01

+0

无论如何,您必须在HTTP POST请求后重定向,以确保下一个请求是HTTP GET。我不确定如果不将表单内容写入数据库就可以直接实现此行为,但这会变得非常棘手。 – 2011-06-01 14:17:08

回答

3

尽管将request.POST变量传递给模板没有什么固有的缺陷,但您试图实现的一切已经由定型表单视图处理。如果您沿着目前的路线走下去,最终会得到一个在Django中处理表单的推荐方式的错误版本。

请参阅Django文档中的using a form in a view

def contact(request): 
    if request.method == 'POST': # If the form has been submitted... 
     form = ContactForm(request.POST) # A form bound to the POST data 
     if form.is_valid(): # All validation rules pass 
      # Process the data in form.cleaned_data 
      # ... 
      return HttpResponseRedirect('/thanks/') # Redirect after POST 
    else: 
     form = ContactForm() # An unbound form 
    return render_to_response('contact.html', { 
     'form': form, 
    }) 

在你的情况下,你需要确保重定向的URL重定向到同一个表单。见django.shortcuts.redirect()

+0

注意:不能将'form'实例直接传递给重定向视图,因为重定向会发出一个HTTP 30x响应,并将产生一个单独的请求。但是,如果表单基于某个模型,则表单初始化应该处理设置表单中以前设置的字段。 – 2011-06-01 14:19:04