Flask 蓝图错误 - 无法为端点构建 url

Mar*_*ink 1 flask python-3.x

我正在设置一个使用蓝图的 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)

Dav*_*ith 5

您使用的蓝图范围为main,因此url_for()base.html 中的 需要引用main.index