不要重新加载视图

2024-09-27 22:37:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我在做一组问题,每个问题的答案都是“是”或“否”。答案取决于其他不同的问题,这个过程会重复几次。问题是,每次用户发送答案时,视图都会被重新加载,并且总是显示第一个问题。 我是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

Tags: 答案selfformdatagetreturnifdef
1条回答
网友
1楼 · 发布于 2024-09-27 22:37:49

您应该进一步了解一下框架和HTTP是如何工作的。你知道吗

首先,HTTP是无状态的,它不记得最后一个请求的状态。记住你去年夏天所做的事情的“黑客”,我指的是请求,就是使用会话。你知道吗

其次,对于每个HTTP请求,Django将实例化一个新的ExpertoView。所以即使你更新了自我。无实际意义属性,下一个请求(对上一个请求一无所知)将以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]

祝你好运。你知道吗

相关问题 更多 >

    热门问题