Python 3.x 烧瓶蓝图错误-无法为终结点生成url

Python 3.x 烧瓶蓝图错误-无法为终结点生成url,python-3.x,flask,Python 3.x,Flask,我正在设置一个使用蓝图的python/flask应用程序。我目前正在运行“hello world”应用程序的框架,当它工作时,我将对其进行扩展。但我遇到了一个错误“werkzeug.routing.BuildError:无法为端点“index”构建url。您是说“main.index”吗 我的应用程序基于米格尔·格林伯格的“超级教程”,我看不出我的精简代码和他的有什么区别。我已经阅读了一些文档并寻求帮助,但没有什么是合适的。我认为这是一种对专家来说显而易见的错误 下面我列出了我认为相关的代码 应

我正在设置一个使用蓝图的python/flask应用程序。我目前正在运行“hello world”应用程序的框架,当它工作时,我将对其进行扩展。但我遇到了一个错误“werkzeug.routing.BuildError:无法为端点“index”构建url。您是说“main.index”吗

我的应用程序基于米格尔·格林伯格的“超级教程”,我看不出我的精简代码和他的有什么区别。我已经阅读了一些文档并寻求帮助,但没有什么是合适的。我认为这是一种对专家来说显而易见的错误

下面我列出了我认为相关的代码

应用程序结构是

\myapp
  myapp.py
  \app
    __init__.py
    \main
      __init__.py
      routes.py
      ...
    \...
      __init__.py
      routes.py
      ...
其中
\app
的每个子文件夹都将是一个蓝图

myapp.py

from app import create_app
app = create_app()
html模板扩展了base.html,非常简单

\app\templates\index.html

{% extends "base.html" %}
{% block content %}
    <div><h1>{{ msg }}</h1></div>
{% endblock %}
\app\templates\index.html
{%extends“base.html”%}
{%block content%}
{{msg}}
{%endblock%}
这是基地。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>

{%if title%}
{{title}}-Metapplica
{%else%}
欢迎来到Metapplica
{%endif%}
元:

{%with messages=get_flashed_messages()%} {%if消息%}
    {消息%中的消息为%s}
  • {{message}}
  • {%endfor%}
{%endif%} {%endwith%} {%block content%}{%endblock%}
当我在浏览器中打开它时,我会

“werkzeug.routing.BuildError:无法为终结点'index'生成url。您是指'main.index'吗?”

这意味着我的名字弄错了还是

完整的错误页面在这里(名称略有不同,因为我稍微简化了代码)

回溯(最近一次呼叫最后一次) 文件“c:\users\markko~1\dropbox\python\projects\metapp~1\venv\lib\site packages\flask\app.py”,第2328行,在call 返回self.wsgi_应用程序(环境,启动响应) wsgi_应用程序中的文件“c:\users\markko~1\dropbox\python\projects\metapp~1\venv\lib\site packages\flask\app.py”,第2314行 response=self.handle\u异常(e) 文件“c:\users\markko~1\dropbox\python\projects\metapp~1\venv\lib\site packages\flask\app.py”,第1760行,在handle\u异常中 重放(exc_类型、exc_值、tb) 文件“c:\users\markko~1\dropbox\python\projects\metapp~1\venv\lib\site packages\flask\u compat.py”,第36行,在reraise中 增值 wsgi_应用程序中的文件“c:\users\markko~1\dropbox\python\projects\metapp~1\venv\lib\site packages\flask\app.py”,第2311行 response=self.full\u dispatch\u request() 文件“c:\users\markko~1\dropbox\python\projects\metapp~1\venv\lib\site packages\flask\app.py”,第1834行,完整发送请求 rv=自身处理用户异常(e) 文件“c:\users\markko~1\dropbox\python\projects\metapp~1\venv\lib\site packages\flask\app.py”,第1737行,在handle\u user\u异常中 重放(exc_类型、exc_值、tb) 文件“c:\users\markko~1\dropbox\python\projects\metapp~1\venv\lib\site packages\flask\u compat.py”,第36行,在reraise中 增值 文件“c:\users\markko~1\dropbox\python\projects\metapp~1\venv\lib\site packages\flask\app.py”,第1832行,完整发送请求 rv=自我分派请求() 文件“c:\users\markko~1\dropbox\python\projects\metapp~1\venv\lib\site packages\flask\app.py”,第1818行,在调度请求中 返回self.view\u函数rule.endpoint 文件“C:\Users\Mark Kortink\Dropbox\Python\projects\metapplica\app\main\routes.py”,索引第16行 返回呈现模板('index.html',title='Home',msg=msg) 文件“c:\users\markko~1\dropbox\python\projects\metapp~1\venv\lib\site packages\flask\templating.py”,第135行,位于render_模板中 上下文(ctx.app) 文件“c:\users\markko~1\dropbox\python\projects\metapp~1\venv\lib\site packages\flask\templating.py”,第117行,在渲染中 rv=template.render(上下文) 文件“c:\users\markko~1\dropbox\python\projects\metapp~1\venv\lib\site packages\jinja2\asyncsupport.py”,第76行,在render中 返回原始渲染(self、*args、**kwargs) 文件“c:\users\markko~1\dropbox\python\projects\metapp~1\venv\lib\site packages\jinja2\environment.py”,第1008行,在render中 返回self.environment.handle\u异常(exc\u info,True) 文件“c:\users\markko~1\dropbox\python\projects\metapp~1\venv\lib\site packages\jinja2\environment.py”,第780行,位于句柄\u异常中 重放(exc_类型、exc_值、tb) 文件“c:\users\markko~1\dropbox\python\projects\metapp~1\venv\lib\site packages\jinja2\u compat.py”,第37行,在reraise中 通过_回溯(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”,第356行,位于 返回appctx.app.handle\u url\u build\u错误(错误、端点、值) 文件“c:\users\markko~1\dropbox\python\projects\metapp~1\venv\lib\site packages\flask\app.py”,第2080行,在handle\u url\u build\u error中 重放(exc_类型、exc_值、tb) 文件“c:\users\markko~1\dropbox\python\projects\metapp~1\venv\lib\site packages\flask\u compat.py”,第36行,在reraise中 增值 文件“c:\users\markko~1\dropbox\python\projects\metapp~1\venv\lib\site packages\flask\helpers.py”,第345行,位于url\u中 力(外部=外部) 文件“c:\users\markko~1\dropbox\python\projects\metapp~1\venv\lib\site packages\werkzeug\routing.py”,第2007行,内部版本
在此框架中打开一个交互式python shell引发BuildError(端点、值、方法、自身)

您使用的蓝图的范围是
main
,因此base.html中的
url\u for()
需要引用
main.index
您使用的蓝图的范围是
main
,因此
url\u for()\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)
\app\templates\index.html

{% extends "base.html" %}
{% block content %}
    <div><h1>{{ msg }}</h1></div>
{% endblock %}
<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>