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