Estoy aprendiendo matraz con planos y tengo el siguiente ejemplo de código:

from flask import Flask, render_template, Blueprint, g

bp = Blueprint('language', __name__, url_prefix='/<int:language_id>', static_folder='static')
app = Flask(__name__)


@bp.url_defaults
def add_language_id(endpoint, values):
    if 'language_id' in g:
        values.setdefault('language_id', g.site_id)
    else:
        g.language_id = 1  # English


@bp.url_value_preprocessor
def pull_language_id(endpoint, values):
    g.language_id = values.pop('language_id')


@bp.route('/')
def index():
    return render_template('main.html')


@bp.route('/lang')
def language():
    return render_template('lang.html')

app.register_blueprint(bp)

if __name__ == '__main__':
    app.run()

Pero recibo este error:

werkzeug.routing.BuildError: No se pudo construir la URL para el punto final 'idioma' con valores ['language_id']. ¿Quiso decir "language.index" en su lugar?

Aquí está el código HTML:

<ul>
    <li>
        <a href="{{ url_for('language', language_id=1) }}">English</a>
    </li>
</ul>

¿Cómo corrijo este error?

0
Tychkin Nikitovich 3 ene. 2017 a las 23:17
1
Noté que eres nuevo en la comunidad y esta es tu tercera pregunta (hasta ahora) sobre este tema. Le sugiero que lea la documentación de flask y python.
 – 
CodeLikeBeaker
3 ene. 2017 a las 23:21

1 respuesta

La mejor respuesta

Parece que le falta el nombre del Blueprint (language) en su enlace de URL:

Desde aquí:

bp = Blueprint('language', __name__, url_prefix='/<int:language_id>', static_folder='static')

Por lo tanto, su enlace deberá adjuntarse:

<a href="{{ url_for('language.language', language_id=1) }}">English</a>

También sugeriría darle un nombre diferente para que no entre en conflicto con cualquier otra convención de nomenclatura que pueda tener.

3
CodeLikeBeaker 3 ene. 2017 a las 23:26
Dices que lo nombro diferente. ¿Cómo puedo nombrarlo?
 – 
Tychkin Nikitovich
3 ene. 2017 a las 23:27
Puedes hacerlo lo que quieras, siempre que tenga sentido. Simplemente me gusta evitar posibles conflictos de nombres.
 – 
CodeLikeBeaker
3 ene. 2017 a las 23:30