Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django 将数据呈现到模板并使用HttpResponseRedirect_Django - Fatal编程技术网

Django 将数据呈现到模板并使用HttpResponseRedirect

Django 将数据呈现到模板并使用HttpResponseRedirect,django,Django,我有一个表单,从用户那里收集数据。输入数据后,我使用HttpResponseRedirect 防止刷新。问题是因为我没有使用此应用程序的数据库, 我不知道如何呈现用户输入的数据 此时,我需要渲染的数据存储在cd中。那么,成功后我如何仍然重定向用户 输入数据并将数据传递到另一个视图,然后进行渲染?我可以将其传递到另一个类视图,但渲染是个问题, 因为数据是通过MathsConfig传递的,而不是通过URL传递的 谢谢,对不起,我是Django的新手 代码如下 views.py class Maths

我有一个表单,从用户那里收集数据。输入数据后,我使用HttpResponseRedirect 防止刷新。问题是因为我没有使用此应用程序的数据库, 我不知道如何呈现用户输入的数据

此时,我需要渲染的数据存储在cd中。那么,成功后我如何仍然重定向用户 输入数据并将数据传递到另一个视图,然后进行渲染?我可以将其传递到另一个类视图,但渲染是个问题, 因为数据是通过MathsConfig传递的,而不是通过URL传递的

谢谢,对不起,我是Django的新手

代码如下

views.py

class MathsConfig(View):
    form_class = MathsForm
    initial={'operation': "Addition",
                     'rows': "",

                     "between1": "1 - 99",
                     "between2": "1 - 99",
                     "between3": None,
                     "between4": None,
                     "between5": None,

                     "questions": 20,
            }
    template_name = 'maths/maths-config.html'

    def get(self, request, *args, **kwargs):
        form = self.form_class(initial=self.initial)
        return render(request, self.template_name, {'form': form})

    def post(self, request, *args, **kwargs):
        form = self.form_class(request.POST)
        if form.is_valid():
            cd = form.cleaned_data

            return HttpResponseRedirect(reverse('maths:maths_success'))
        return render(request, self.template_name, {'form': form})


class MathsQuestions(object):

    def __init__(self):
        # want to pass cd varible here and then render it.

class MathsSuccess(TemplateView):
    template_name = "maths/maths-success.html"
url.py

urlpatterns = patterns('',
    url(r'^config/$', views.MathsConfig.as_view(), name='maths_config'),
    url(r'^success/$', views.MathsSuccess.as_view(), name='maths_success'),
    url(r'^$', views.MathsQuestions(), name='maths_display'),
)
编辑:

将其存储在会话中

request.session['entered_form_data'] = data
在下一个视图中:

if 'entered_form_data' in request.session.keys():
    formdata = request.session['entered_form_data']
    del request.session['entered_form_data']
编辑:

def someview(request):
  template = 'something.html'

  form = SomeForm(request.POST) if request.method == 'POST' else SomeForm()

  if request.method == 'POST':
    if form.is_valid():
      data = form.get_cleaned_data()
      request.session['entered_form_data'] = data
      return HttpResponseRedirect('/someurl/')

  render_to_response(template, {'form':form}, context_instance=RequestContext(request))

def someurl_view(request):
  template = 'someurl.html'

  render_to_response(template, {'formdata':request.session.pop('entered_form_data', None)}, context_instance=RequestContext(request))

当然,您需要创建一个函数,它自己从表单返回数据。我指的是我称之为form.get_cleaned_data()的函数。尽管我建议你把字典还给我,你想怎么做就怎么做。

谢谢你的回复。我试图添加此项,但出现类型错误。我还是Django新手,不确定语法是否正确。请参阅上面的编辑,了解我的尝试。您需要在视图中存储数据,而不是在表单中存储数据。我会更新答案。@OdifYltsaeb您的第二个代码片段可以完全替换为
formdata=request.session.pop('entered\u form\u data',None)
`您说得对。由于该用户是django/python的新手,这些速记/快捷方式可能会让他感到困惑:)
def someview(request):
  template = 'something.html'

  form = SomeForm(request.POST) if request.method == 'POST' else SomeForm()

  if request.method == 'POST':
    if form.is_valid():
      data = form.get_cleaned_data()
      request.session['entered_form_data'] = data
      return HttpResponseRedirect('/someurl/')

  render_to_response(template, {'form':form}, context_instance=RequestContext(request))

def someurl_view(request):
  template = 'someurl.html'

  render_to_response(template, {'formdata':request.session.pop('entered_form_data', None)}, context_instance=RequestContext(request))