python flask url_for выдает постоянные ошибки сборки werkzeug

У меня ошибка flask url_for('') в очень простом приложении.

from flask import Blueprint, render_template, abort
from jinja2 import TemplateNotFound

base = Blueprint('main', __name__)

@base.route('/', defaults={'page':'home'})
@base.route('/<page>')
def show(page):
    try:
        return render_template('%s.html'%page, name='my name is')
    except TemplateNotFound:
        abort(404)

выше мой файл чертежей, эти маршруты работают нормально, но если я попытаюсь сделать

with flask.test_request_context():
    print url_for('home') #home.html or any other forms

Я просто получаю эту ошибку:

raise BuildError(endpoint, values, method)
werkzeug.routing.BuildError: ('home', {}, None)

может ли кто-нибудь помочь мне понять, что здесь происходит? на моей html-странице я могу распечатать местоположение статических файлов с помощью:

{{ url_for('static', filename='style.css') }}

но если я попытаюсь сделать:

{{ url_for('home') }}

Опять получаю ту же ошибку. У кого-нибудь есть совет, как действовать?


person steffan    schedule 20.10.2014    source источник


Ответы (2)


Я думаю, вы пытаетесь использовать url_for неправильно. url_for обычно сопоставляет конечную точку, то есть функцию/метод Python, с URL-адресом. В вашем случае home - это значение параметра, а не конечной точки.

Итак, вместо этого используйте имя функции python, для которой вы хотите получить URL-адрес:

url_for('show', page='home')

Должно быть то, что вы ищете.

person sebastian    schedule 20.10.2014
comment
Спасибо за действительно четкое объяснение и расширенный пример. - person steffan; 20.10.2014

Когда вы делаете {{ url_for('home') }}, он не возвращает маршрут home.html, вместо этого он возвращает маршрут функции home, которой, кстати, не существует.

Итак, чтобы решить вашу проблему, правильный способ использования url_for:

{{ url_for('show') }}
person Alfie    schedule 20.10.2014