不要重新加载视图Django

时间:2016-11-10 17:44:43

标签: python django

我做了一系列问题,每个问题都回答是或否。取决于答案将是另一个不同的问题,这个过程将重复几次。问题是,每次用户发送答案时,视图都会重新加载并始终显示第一个问题。 我是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

1 个答案:

答案 0 :(得分:0)

您应该更多地了解框架和HTTP的工作原理。

首先,HTTP是无状态的,它不记得最后一个请求的状态。 " hack"要记住你去年夏天所做的事情,我的意思是请求,就是使用会话。

其次,对于每个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]

一帆风顺。