2016-11-10 9 views
0

私は一連の質問をしています、すべての質問はイエスかノーで答えられます。答えに応じて、別の質問があり、このプロセスは何度か繰り返されます。問題は、ユーザーが応答を送信するたびにビューが再読み込みされ、常に最初の質問が表示されることです。 私はDjangoとWebプログラミングの新機能です。 あなたの答えをありがとう。ビューをリロードしないDjango

class ExpertoView(FormView): 
    template_name = "SisExperto.html" 
    form_class = FormExpert 
    success_url = 'SisExperto' 
    def __init__(self): 
     self.arbol = eval(self.fileToStr('SisExperto/enfermedades.txt')) #evalua el archivo 
     self.Nodoactual = self.arbol 
     self.pregunta = self.Nodoactual[0] 

    def form_valid(self, form): 
     #This method is calle when valid for data has been POSTED 
     #It should return an HttpResponse 
     if len(self.Nodoactual) == 3: 
      [self.pregunta, yesNode, noNode] = self.Nodoactual 

      if form.is_valid(): 
       form_data = form.cleaned_data 
       respuesta = form_data.get('campo') 
       if respuesta == 'y': 
        self.Nodoactual = yesNode 
       else: 
        self.Nodoactual = noNode 
       self.pregunta = self.Nodoactual[0] 

     #el siguiente return es obligatorio 
     return super(ExpertoView, self).form_valid(form) 

    def get_context_data(self, **kargs): 
     """ Use this to add extra context """ 
     context = super(ExpertoView, self).get_context_data(**kargs) 
     context["pregunta"] = self.pregunta 
     return context 

答えて

0

フレームワークとHTTPの仕組みについてもう少し詳しく見てください。

最初に、HTTPはステートレスであり、最後のリクエストの状態を覚えていません。去年の夏に何をしたのかを覚えている「ハック」は、セッションを使うことを要求していました。

第2に、すべてのHTTPリクエストに対して、Djangoは新しいExpertoViewをインスタンス化します。したがって、self.Nodoactual属性を更新しても、次のリクエスト(最後のリクエストについては何も知らない)はself.arbolで始まります。あなたの視点でsessionを使用するべき場所がここにあります。

 # maybe something like this? 
     if form.is_valid(): 
      form_data = form.cleaned_data 
      respuesta = form_data.get('campo') 
      if respuesta == 'y': 
       self.requests.session['Nodoactual'] = yesNode 
      else: 
       self.requests.session['Nodoactual'] = noNode 
      self.pregunta = self.Nodoactual[0] 

Godspeed。

関連する問題