烧瓶蓝图错误-无法为端点建立网址

时间:2019-06-02 00:02:55

标签: python-3.x flask

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

\app的每个子文件夹将是一个蓝图。

myapp.py

from app import create_app
app = create_app()
\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
\app\main\__init__.py

from flask import Blueprint

bp = Blueprint('main', __name__)

from app.main import routes
\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)

一个html模板扩展了base.html并且很简单

\app\templates\index.html

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

在浏览器中打开它

“ 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(环境,start_response) wsgi_app中的文件“ c:\ users \ markko〜1 \ dropbox \ python \ projects \ metapp〜1 \ venv \ lib \ site-packages \ flask \ app.py”,第2314行 响应= self.handle_exception(e) 文件“ c:\ users \ markko〜1 \ dropbox \ python \ projects \ metapp〜1 \ venv \ lib \ site-packages \ flask \ app.py”,行1760,在handle_exception中 加价(exc_type,exc_value,tb) 重新列出文件“ c:\ users \ markko〜1 \ dropbox \ python \ projects \ metapp〜1 \ venv \ lib \ site-packages \ flask_compat.py”,第36行 提高价值 wsgi_app中第2311行的文件“ c:\ users \ markko〜1 \ dropbox \ python \ projects \ metapp〜1 \ venv \ lib \ site-packages \ flask \ app.py” 响应= 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中 加价(exc_type,exc_value,tb) 重新列出文件“ c:\ users \ markko〜1 \ dropbox \ python \ projects \ metapp〜1 \ venv \ lib \ site-packages \ flask_compat.py”,第36行 提高价值 1832行中的文件“ c:\ users \ markko〜1 \ dropbox \ python \ projects \ metapp〜1 \ venv \ lib \ site-packages \ flask \ app.py”,在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行 返回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”,行1008 返回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中 加价(exc_type,exc_value,tb) 重新列出文件“ c:\ users \ markko〜1 \ dropbox \ python \ projects \ metapp〜1 \ venv \ lib \ site-packages \ jinja2_compat.py”,第37行 提高价值.with_traceback(tb) 文件“ C:\ Users \ Mark Kortink \ Dropbox \ Python \ projects \ metapplica \ app \ templates \ index.html”,第1行,顶级模板代码 {%扩展了“ base.html”%} 文件“ C:\ Users \ Mark Kortink \ Dropbox \ Python \ projects \ metapplica \ app \ templates \ base.html”,第12行,顶级模板代码 家 网址为356的文件“ c:\ users \ markko〜1 \ dropbox \ python \ projects \ metapp〜1 \ venv \ lib \ site-packages \ flask \ helpers.py” 返回appctx.app.handle_url_build_error(错误,端点,值) 文件“ c:\ users \ markko〜1 \ dropbox \ python \ projects \ metapp〜1 \ venv \ lib \ site-packages \ flask \ app.py”,行2080,在handle_url_build_error中 加价(exc_type,exc_value,tb) 重新列出文件“ c:\ users \ markko〜1 \ dropbox \ python \ projects \ metapp〜1 \ venv \ lib \ site-packages \ flask_compat.py”,第36行 提高价值 网址为345的文件“ c:\ users \ markko〜1 \ dropbox \ python \ projects \ metapp〜1 \ venv \ lib \ site-packages \ flask \ helpers.py” force_external =外部) 构建中的文件“ c:\ users \ markko〜1 \ dropbox \ python \ projects \ metapp〜1 \ venv \ lib \ site-packages \ werkzeug \ routing.py”,第2007行 在此框架中打开一个交互式python shell BuildError(端点,值,方法,自身)

2 个答案:

答案 0 :(得分:0)

@Mark。该错误是由Jinja引起的,而不是Flask本身引起的。从您发布的堆栈跟踪中可以看出,错误显然来自base.html或index.html(我猜是base.html,因为您已经发布了index.html,看起来不错)。

我认为您在base.html中某个地方引用了索引路由(也许使用url_for)。如果您可以发布base.html,那么我将为您提供更好的帮助。

答案 1 :(得分:0)

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