Колба-навигация не работает с примером приложения колба-бутстрап
Я пытаюсь воссоздать этот пример приложения, которое поставляется с flask-bootstrap, но столкнулось с проблемой, отображающей панель навигации. Я получаю сообщение об ошибке: inja2.exceptions.UndefinedError: "объект flask_nav.Nav" не имеет атрибута "fronend_top"
Пример приложения находится здесь: https://github.com/mbr/flask-bootstrap/tree/master/sample_app
И пример с флягой-навигацией находится здесь: http://pythonhosted.org/flask-nav/getting-started.html
Насколько я могу судить, я делаю то, что кажется правильным, но я думаю, что навигация не передается в контекст веб-страницы? Точно сказать не могу.
Вот мой server.py
from flask import Blueprint, render_template, flash, redirect, url_for
from flask_bootstrap import __version__ as FLASK_BOOTSTRAP_VERSION
from flask_bootstrap import Bootstrap
from flask_nav.elements import Navbar, View, Subgroup, Link, Text, Separator
from markupsafe import escape
from flask_nav import Nav
from forms import SignupForm
from flask import Flask
#from nav import nav
frontend = Blueprint('frontend', __name__)
# We're adding a navbar as well through flask-navbar. In our example, the
# navbar has an usual amount of Link-Elements, more commonly you will have a
# lot more View instances.
nav = Nav()
nav.register_element('frontend_top', Navbar(
View('Flask-Bootstrap', '.index'),
View('Home', '.index'),
View('Forms Example', '.example_form'),
View('Debug-Info', 'debug.debug_root'), ))
# Our index-page just shows a quick explanation. Check out the template
# "templates/index.html" documentation for more details.
@frontend.route('/')
def index():
return render_template('index.html', nav=nav)
app = Flask(__name__)
app.register_blueprint(frontend)
bootstrap = Bootstrap(app)
nav.init_app(app)
app.run(debug=True)
И вот строка, которая выдает ошибку в моем base.html
{% block navbar %}
{{nav.fronend_top.render()}}
{% endblock %}
Спасибо за любую помощь!
1 ответ
Вы пытаетесь это с flask-boostrap4
? Если так, я обнаружил, что это Navbar Renderer не работает и вызывает ту же ошибку, которую вы нашли. С помощью flask-boostrap
v3 вместе с BS 3, кажется, это исправить.
Я смог использовать это: https://github.com/mbr/flask-nav/blob/master/example/__init__.py
и это: http://pythonhosted.org/flask-nav/getting-started.html
создать упрощенную версию, которая работала. Я начал с метода create_app из примера init, который работал, а затем удалил метод в примере ниже. Может быть, это связано с тем, что это был проект? так у него не было объекта nav?
from flask import Blueprint, render_template, flash, redirect, url_for
from flask_bootstrap import __version__ as FLASK_BOOTSTRAP_VERSION
from flask_bootstrap import Bootstrap
from flask_nav.elements import Navbar, View, Subgroup, Link, Text, Separator
from markupsafe import escape
from flask_nav import Nav
from forms import SignupForm
from flask import Flask
#from nav import nav
app = Flask(__name__)
nav = Nav()
topbar = Navbar('',
View('Home', 'index'),
)
nav.register_element('top', topbar)
# not good style, but like to keep our examples short
@app.route('/')
def index():
return render_template('index.html')
@app.route('/products/<product>/')
def products(product):
return render_template('index.html', msg='Buy our {}'.format(product))
@app.route('/about-us/')
def about():
return render_template('index.html')
# Shows a long signup form, demonstrating form rendering.
@app.route('/example-form/', methods=('GET', 'POST'))
def example_form():
form = SignupForm()
if form.validate_on_submit():
flash('Hello, {}. You have successfully signed up'
.format(escape(form.name.data)))
# In a real application, you may wish to avoid this tedious redirect.
return redirect(url_for('.index'))
return render_template('signup.html', form=form)
nav.init_app(app)
bootstrap = Bootstrap(app)
app.run(debug=True)