运行程序时提示:Could not build url for endpoint 'index'. Did you mean 'new_note' instead?

文件组织如下:
001
代码如下:
#init.py文件
# -- coding: utf-8 --
import os
import sys
from flask import Flask
from flask_sqlalchemy import SQLAlchemy

DIALECT = 'mysql'
DRIVER = 'pymysql'
USERNAME = 'root'
PASSWORD = '12345678'
HOST = '127.0.0.1'
PORT = '3306'
DATABASE = 'sqlaldata'#要先创建这个数据库文件

app = Flask(__name__)
app.config['SECRET_KEY'] = os.getenv('SECRET_KEY', 'dev')
app.config['SQLALCHEMY_DATABASE_URI'] = "{}+{}://{}:{}@{}:{}/{}?charset=utf8".format(DIALECT, DRIVER, USERNAME, PASSWORD, HOST, PORT,DATABASE)
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db = SQLAlchemy(app)
from database import views,forms,models

#forms.py文件
from flask_wtf import FlaskForm
from wtforms import SubmitField, TextAreaField
from wtforms.validators import DataRequired

class NewNoteForm(FlaskForm):
    body = TextAreaField('Body', validators=[DataRequired()])
    submit = SubmitField('Save')

    #views.py    
    from flask import redirect, url_for, abort, render_template, flash
    from database import app, db
    from database.models import Note
    from database.forms import NewNoteForm
   
    @app.route('/new', methods=['GET', 'POST'])
    def new_note():
        form = NewNoteForm()
        if form.validate_on_submit():
            body = form.body.data
            note = Note(body=body)
            db.session.add(note)
            db.session.commit()
            flash('Your note is saved.')
            return redirect(url_for('index'))
        return render_template('new_note.html', form=form)

#models.py
from database import db

class Note(db.Model):
id = db.Column(db.Integer,primary_key=True)
body = db.Column(db.Text)

程序运行时,在地址栏输入:http://localhost:5000/new,提示Could not build url for endpoint ‘index’. Did you mean ‘new_note’ instead?
图片
图片
而在views.py文件中添加:
@app.route(’/’)
def index():
pass
则能正确显示页面:
图片
请问index函数起什么作用?

你看你new_route里面

return redirect(url_for('index'))

这其中的 url_for('index') 的意思是找到 名称为 index 对应的URL地址,然而你没有这个名称的路由

@app.route(’/’)
def index():
    pass

则恰好定义了这样一个路由,它的名称是 index

1 Like

可是我把下面的语句注释掉以后,还是会出现同样的问题

if form.validate_on_submit():
            body = form.body.data
            note = Note(body=body)
            db.session.add(note)
            db.session.commit()
            flash('Your note is saved.')
            return redirect(url_for('index'))

一般情况下,出错都可以在错误回溯信息里找到具体出错的代码行数,比如从你贴出的截图就可以看到 base.html 模版第 16 行同样有一个 url_for('index') 函数调用:

下次出问题可以先自己试着从错误回溯寻找和解决问题。另外,下次请使用纯文本而不是图片给出错误回溯,并正确格式化代码。

1 Like

好的,多谢。