Django:表单数据未被访问以在会话中存储数据

时间:2012-08-04 11:11:00

标签: django django-forms django-templates django-views django-sessions

views.py

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 个答案:

答案 0 :(得分: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 }}

足以实现这一目标。