Максимальная глубина рекурсии rutimeerror превышена при создании представления

У меня есть эти 2 формы, которые появляются на одной странице (dashboard.html)

# Forms.py

class Area(Form):
    title = TextField("Title", [validators.Required("Please enter an Area Title")])
    text = TextAreaField("Text (max 50 characters)",[validators.Required("Please enter an Area text"),validators.Length(max=50,message="Area text cannot be more than 50 characters")])

class Message(Form):
    Message_title = TextField("Title", [validators.Required("Please enter a Message Title")])
    Message_Date_and_Time = DateTimeField("Date and Time")

И я пытаюсь создать 3 представления, чтобы позаботиться о всех случаях:

  • когда я показываю dashboard.html при переходе на страницу изначально ([GET])
  • когда пользователь отправляет Area форма (поэтому он получает сообщения о проверке или об ошибках в зависимости от проверки) ([POST])
  • когда пользователь отправляет Message форма (поэтому он получает сообщения о проверке или об ошибках в зависимости от проверки) ([POST])

Для этого у меня есть следующий код:

@app.route('/dashboard.html')
def dashboard():
    return render_template('dashboard.html',form= Area(),M_form = Message())

@app.route('/Area',methods=['POST'])
def Area():
    return render_template('dashboard.html', form= Area(), M_form=Message())

@app.route('/Message',methods=['POST'])
def Area():
    return render_template('dashboard.html', form= Area(), M_form=Message())

Но когда я пытаюсь загрузить любой из этих 3 представлений, я получаю RuntimeError: maximum recursion depth exceeded ошибка и трассировка

return self.view_functions[rule.endpoint](**req.view_args)  
...., line 24, in dashboard  
return render_template('dashboard.html', form= Area(), M_form = Message())  
...., line 31, in Area  
return render_template('dashboard.html', form= Area(), N_form = Message())  
...., line 31, in Area  
return render_template('dashboard.html', form= Area(), N_form = Message())  

Одна и та же ошибка снова и снова, пока не достигнет своего предела времени.

И когда я просто использую вид панели инструментов (после удаления обоих /Area а также /Message просмотров вообще из кода) все работает просто отлично. Я понимаю dashboard.html,

Я искал вокруг, я не могу найти какую-либо связь между runtimeerror: maximum recursion и формы или WTforms. Кажется, что он всегда связан с не правильно замкнутым циклом, но здесь у меня нет цикла. Я не вижу, откуда это.

1 ответ

Решение

У вас есть то же имя для Area функции вида и вида (/Area а также /Message). Вы получаете ошибку глубины рекурсии, потому что внутри имени функции представления Area, ты звонишь Area() снова, чтобы сгенерировать форму, но вместо этого функция представления бесконечно вызывается обратно в рекурсии.

@app.route('/Area',methods=['POST'])
def Area():
    # Area() is called below and it refers to this view function itself
    # that was just declared above.
    return render_template('dashboard.html', form= Area(), M_form=Message())

Измените имена функций представления на что-то другое и уникальное.

Другие вопросы по тегам