1

views.pyDjango的:表单数据不被访问的数据存储在会话

from textize.models import Textizer 
from django.http import HttpResponseRedirect 
from django.shortcuts import render_to_response 
from django.core.context_processors import csrf 

def index(request): 
    if request.method == 'POST': 
     form = Textizer(request.POST) 
     print "debug 0" # <---It's not reaching this point when I submit the data via the form 
     if form.is_valid(): #check to see if the input is valid 
      print "debug 1" 
      request.session['text'] = form.cleaned_data['to_textize'] #set the session key:value pair 
      return HttpResponseRedirect('/results') #redirect to the results page 

    else: 
     form = Textizer() 
     print "debug 2" # reaches here 

    c = {'form': form} 
    c.update(csrf(request)) 

    return render_to_response('index.html', c) 

def results(request): 
    text = request.session.get("text", "dummy") 
    c = {'text' : text} 
    return render_to_response('results.html', c) 

的index.html

<form action="/results" method="POST"> {% csrf_token %} 
    {{ form.as_p }} 
    <input type="submit" value="Submit" /> 
</form> 

results.html

<b>Input text: </b>{{ text }} 

我'试图将数据从“索引”页面传递到“结果”页面。在这种情况下,我想显示在结果页面上键入并提交的字符串。

我的表单出了什么问题?

另外,我正在形成会话密钥:值正确吗?

+1

但是你发布到'/结果',不应该像'{%url index%}'这样的东西吗? – okm 2012-08-04 11:14:10

回答

1
from textize.models import Textizer 
from django.http import HttpResponseRedirect 
from django.shortcuts import render_to_response 
from django.core.context_processors import csrf 

def index(request): 

    form = Textizer(request.POST or None) 

    if request.method == 'POST': 
     print "debug 0" 
     if form.is_valid(): 
      print "debug 1" 
      request.session['text'] = form.cleaned_data['to_textize'] 

    c = {'form': form, 'text':request.session.get("text", "")} 
    c.update(csrf(request)) 

    return render_to_response('index.html', c) 

然后模板的index.html

<form action="" method="POST"> {% csrf_token %} 
    {{ form.as_p }} 
    <input type="submit" value="Submit" /> 
</form> 
result: {{ text }} 

足以让这是怎么回事。