我正在设置一个使用蓝图的 python/flask 应用程序。我目前正在运行骨架“hello world”应用程序,当它工作时我会扩展它。但我被卡住并收到错误消息“werkzeug.routing.BuildError:无法为端点'index'构建url。你的意思是'main.index'吗?”
我的应用程序基于 Miguel Grinberg 的“超级教程”,我看不出我的精简代码和他的有任何区别。我已经阅读了一些文档并搜索了帮助,但没有什么非常适合的。我认为这是一种对专家来说显而易见的错误类型。
下面我列出了我认为是相关的代码。
应用程序结构是
\myapp
myapp.py
\app
__init__.py
\main
__init__.py
routes.py
...
\...
__init__.py
routes.py
...
Run Code Online (Sandbox Code Playgroud)
其中每个子文件夹\app都是一个蓝图。
myapp.py
from app import create_app
app = create_app()
Run Code Online (Sandbox Code Playgroud)
\app\__init__.py
from flask import Flask, request, current_app
from config import Config
def create_app(config_class=Config):
app = Flask(__name__)
app.config.from_object(config_class)
# Register blueprints
from app.errors import bp as errors_bp
app.register_blueprint(errors_bp)
from app.auth import bp as auth_bp
app.register_blueprint(auth_bp, url_prefix='/auth')
from app.meta import bp as meta_bp
app.register_blueprint(meta_bp)
from app.main import bp as main_bp
app.register_blueprint(main_bp)
return app
Run Code Online (Sandbox Code Playgroud)
\app\main\__init__.py
from flask import Blueprint
bp = Blueprint('main', __name__)
from app.main import routes
Run Code Online (Sandbox Code Playgroud)
\app\main\routes.py
from app.main import bp
from flask import render_template
@bp.route('/')
@bp.route('/index')
def index():
msg = "Hello World!"
return render_template('index.html', title='Home', msg=msg)
Run Code Online (Sandbox Code Playgroud)
一个 html 模板扩展了 base.html 并且是微不足道的
\app\templates\index.html
{% extends "base.html" %}
{% block content %}
<div><h1>{{ msg }}</h1></div>
{% endblock %}
Run Code Online (Sandbox Code Playgroud)
这里是基地。html
<html>
<head>
{% if title %}
<title>{{ title }} - Metapplica</title>
{% else %}
<title>Welcome to Metapplica</title>
{% endif %}
</head>
<body>
<div>
Meta:
<a href="{{ url_for('index') }}">Home</a>
</div>
<hr>
{% with messages = get_flashed_messages() %}
{% if messages %}
<ul>
{% for message in messages %}
<li>{{ message }}</li>
{% endfor %}
</ul>
{% endif %}
{% endwith %}
{% block content %}{% endblock %}
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
当我在浏览器中打开它时,我得到
“werkzeug.routing.BuildError:无法为端点'index'构建url。你的意思是'main.index'吗?”
这意味着不知何故我把我的名字调错了或者?
完整的错误页面在这里(名称略有不同,因为我稍微简化了代码)。
回溯(最近一次调用)文件“c:\users\markko~1\dropbox\python\projects\metapp~1\venv\lib\site-packages\flask\app.py”,第 2328 行,调用中 返回 self.wsgi_app(environ, start_response) 文件 "c:\users\markko~1\dropbox\python\projects\metapp~1\venv\lib\site-packages\flask\app.py", line 2314, in wsgi_app response = self.handle_exception(e) File "c:\users\markko~1\dropbox\python\projects\metapp~1\venv\lib\site-packages\flask\app.py", line 1760, in handle_exception reraise (exc_type, exc_value, tb) 文件 "c:\users\markko~1\dropbox\python\projects\metapp~1\venv\lib\site-packages\flask_compat.py", line 36, in reraise raise value File " c:\users\markko~1\dropbox\python\projects\metapp~1\venv\lib\site-packages\flask\app.py”,第 2311 行,在 wsgi_app response = self.full_dispatch_request() 文件“c: \users\markko~1\dropbox\python\projects\metapp~1\venv\lib\site-packages\flask\app.py”,第 1834 行,在 full_dispatch_request rv = self.handle_user_exception(e) 文件“c:\users\markko~1\dropbox\python\projects\metapp~1\venv\lib\site-packages\flask\app.py”,第 1737 行,在 handle_user_exception reraise(exc_type, exc_value , tb) 文件 "c:\users\markko~1\dropbox\python\projects\metapp~1\venv\lib\site-packages\flask_compat.py", line 36, in reraise raise value File "c:\users \markko~1\dropbox\python\projects\metapp~1\venv\lib\site-packages\flask\app.py”,第 1832 行,在 full_dispatch_request rv = self.dispatch_request() 文件“c:\users\markko ~1\dropbox\python\projects\metapp~1\venv\lib\site-packages\flask\app.py”,第 1818 行,在 dispatch_request 中返回 self.view_functionsrule.endpoint 文件“C:\Users\Mark Kortink\Dropbox \Python\projects\metapplica\app\main\routes.py",第 16 行,在索引中 return render_template('index.html', title='Home', msg=msg) 文件“c:\users\markko~1\dropbox\python\projects\metapp~1\venv\lib\site-packages\flask\templating.py”,第 135 行,在 render_template 上下文中, ctx.app) 文件“c:\users\markko~1\dropbox\python\projects\metapp~1\venv\lib\site-packages\flask\templating.py”,第 117 行,在 _render rv = template.render (上下文)文件“c:\users\markko~1\dropbox\python\projects\metapp~1\venv\lib\site-packages\jinja2\asyncsupport.py”,第 76 行,在渲染中返回 original_render(self, * args, **kwargs) 文件 "c:\users\markko~1\dropbox\python\projects\metapp~1\venv\lib\site-packages\jinja2\environment.py", line 1008, in render return self. environment.handle_exception(exc_info, True) 文件“c:\users\markko~1\dropbox\python\projects\metapp~1\venv\lib\site-packages\jinja2\environment.py”,第 780 行,在 handle_exception reraise(exc_type, exc_value, tb) 文件“c:\users\markko~1\dropbox\python\projects\metapp~1\venv\lib\site-packages\jinja2_compat.py”,第 37 行,在 reraise raise value.with_traceback(tb) 文件“C:\Users\Mark Kortink\Dropbox\Python\projects\metapplica\app\templates\index.html”,第 1 行,顶级模板代码 {% extends "base.html" %} 文件“C:\Users\Mark Kortink\Dropbox\Python\projects\metapplica\app\templates\base.html”,第 12 行,顶层模板代码主文件“c:\users\markko~1\ dropbox\python\projects\metapp~1\venv\lib\site-packages\flask\helpers.py", line 356, in url_for return appctx.app.handle_url_build_error(error, endpoint, values) File "c:\users\ markko~1\dropbox\python\projects\metapp~1\venv\lib\site-packages\flask\app.py”,第 2080 行,在 handle_url_build_error reraise(exc_type, exc_value, tb) 文件“c:\users\markko~1\dropbox\python\projects\metapp~1\venv\lib\site-packages\flask_compat.py”,第 36 行,在 reraise raise值文件“c:\users\markko~1\dropbox\python\projects\metapp~1\venv\lib\site-packages\flask\helpers.py”,第 345 行,在 url_for force_external=external 中)文件“c: \users\markko~1\dropbox\python\projects\metapp~1\venv\lib\site-packages\werkzeug\routing.py", line 2007, in build 在这个框架中打开一个交互式 python shell BuildError(endpoint, values , 方法, 自我)py”,第 345 行,在 url_for force_external=external 中)文件“c:\users\markko~1\dropbox\python\projects\metapp~1\venv\lib\site-packages\werkzeug\routing.py”,第 2007 行, in build 在这个frameraise中打开一个交互式python shell BuildError(endpoint, values, method, self)py”,第 345 行,在 url_for force_external=external 中)文件“c:\users\markko~1\dropbox\python\projects\metapp~1\venv\lib\site-packages\werkzeug\routing.py”,第 2007 行, in build 在这个frameraise中打开一个交互式python shell BuildError(endpoint, values, method, self)