我正在设置一个使用蓝图的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(端点,值,方法,自身)
答案 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
。