Я устанавливаю приложение на python / flask, которое использует чертежи. В настоящее время я запускаю скелетное приложение «Привет, мир», и когда оно заработает, я его расширю. Но я застрял и получаю сообщение об ошибке "werkzeug.routing.BuildError: Не удалось создать URL для конечной точки" index ". Вы вместо этого имели в виду" 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()
\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: Не удалось построить URL для конечной точки 'index'. Вы вместо этого имели в виду 'main.index'?"
что подразумевает, что я получаю неправильное имя, или?
Полная страница ошибки здесь (немного другие названия, потому что я немного упростил код).
Traceback (последний вызов был последним)
Файл "c: \ users \ markko ~ 1 \ dropbox \ python \ projects \ metapp ~ 1 \ venv \ lib \ site-packages \ flask \ app.py", строка 2328, в вызов
вернуть self.wsgi_app (environment, start_response)
Файл "c: \ users \ markko ~ 1 \ dropbox \ python \ projects \ metapp ~ 1 \ venv \ lib \ site-packages \ flask \ app.py", строка 2314, в wsgi_app
response = 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, в ререйзе
повысить ценность
Файл "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
ререйз (exc_type, exc_value, tb)
Файл "c: \ users \ markko ~ 1 \ dropbox \ python \ projects \ metapp ~ 1 \ venv \ lib \ site-packages \ flask_compat.py", строка 36, в ререйзе
повысить ценность
Файл "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 \ rout.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", строка 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, в ререйзеподнять 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 ", строка 356, в URL-адресе для возврата 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 reraise (exc_type, exc_value, tb) Файл" c: \ users \ "markko ~ 1 \ dropbox \ python \ projects \ metapp ~ 1 \ venv \ lib \ site-packages \ flask_compat.py ", строка 36, в значении рейз-рейса Файл" 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 ", строка 2007, в сборке Откройте интерактивную оболочку python в этом фрейме BuildError (конечная точка, значения, метод, self)