Ошибка светокопии колбы - не удалось создать URL для конечной точки - PullRequest
0 голосов
/ 02 июня 2019

Я устанавливаю приложение на 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)

1 Ответ

1 голос
/ 02 июня 2019

Используемый вами проект соответствует main, поэтому url_for() в base.html должен ссылаться на main.index.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...