Flask Nav с Flask Bootstrap: у объекта 'Navbar' нет атрибута 'kwargs'
В этом коде Flask Nav работает, пока я не добавлю код Flask Bootstrap:
from flask import Flask, render_template
from flask_bootstrap import Bootstrap
from flask_nav import Nav
from flask_nav.elements import Navbar, Subgroup, View, Link, Text, Separator
app = Flask(__name__)
nav = Nav(app)
nav.register_element('my_navbar', Navbar(
'thenav',
View('Home Page', 'index'),
View('Item', 'item', item=1),
Separator(),
Link('Google', 'https://www.google.com'),
Separator(),
Text('Some text'),
Subgroup('Extras',
Link('Yahoo', 'https://www.yahoo.com'),
View('Index', 'index')
)
))
Bootstrap(app)
@app.route('/')
def index():
return render_template('index.html')
@app.route('/items/<item>')
def item(item):
return '<h2>The item is {} </h2>'.format(item)
if __name__ == '__main__':
app.run(debug=True)
Как только Flask Bootstrap добавлен, я получаю
AttributeError: у объекта 'Navbar' нет атрибута 'kwargs'
0 ответов
После 20 дней борьбы. Я понял, что My Navbar был создан в pyhton с использованием flask-nav, но похоже, что версия flask-Bootstrap4 несовместима с flask-nav. Поэтому я закомментировал весь код, связанный с навигационной панелью, и попытался создать NavBar в самом HTML с помощью Bootstrap4. Тогда это сработало для меня. Я использовал тему cosmo.Bootstrap.min.css. И вам следует установить flask-Bootstrap4, то есть: pip install flask-Bootstrap4 Надеюсь, этот ответ будет полезным.
Моя реализация HTML-кода NavBar
<nav class="navbar navbar-expand-lg navbar-dark bg-dark">
<a class="navbar-brand" href="{{ url_for('index') }}">NavBar</a>
<button class="navbar-toggler" type="button" data-toggle="collapse"
data-target="#navbarNavDropdown" aria-controls="navbarNavDropdown"
aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarNavDropdown">
<ul class="navbar-nav">
<li class="nav-item active">
<a class="nav-link" href="{{ url_for('index') }}">Home <span
class="sr-only">(current)</span></a>
</li>
<li class="nav-item">
<a class="nav-link" href="{{ url_for('Title_2') }}">Title_2</a>
</li>
<li class="nav-item">
<a class="nav-link" href="{{ url_for('Title_3') }}">Title_3</a>
</li>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="" id="navbarDropdownMenuLink" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
User
</a>
<div class="dropdown-menu" aria-labelledby="navbarDropdownMenuLink">
<a class="dropdown-item" href="{{ url_for('login') }}">Login</a>
<a class="dropdown-item" href={{url_for('change_password')}}">Change Password</a>
<a class="dropdown-item" href={{url_for('logout')}}">Logout</a>
</div>
</li>
</ul>
</div>
</nav>
Вы можете перейти по этой ссылке и получить представление о том, как реализовать NavBar: https://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-ii-templates
У меня тоже была эта проблема при использовании flask-boostrap 4.0.2, потому что я собирался использовать Bootstrap 4. Возвращаясь к flask-bootstrap 3.3.7.1, он начал работать (при условии, что я также использовал Boostrap 3.3.7). На момент написания статьи 3.3.7.1, похоже, была последней версией колбы-бустрапа и устарела на 2 года. Предполагаемый "flask-bootstrap4" проходит год без новых выпусков, и, похоже, у него нет публичного git-репо для людей, которые могли бы внести свой вклад. Я верю nav.Bootstraprenderer
класс не работает в v4, но код v3 не отображает NavBars должным образом при использовании BS4.
Потратив на это пару часов, я не уверен, что мы многое получим с помощью flask-boostrap: нетрудно просто поддерживать наш собственный базовый шаблон Jinja2, импортируя нужные нам версии BS вместе с основными блоками.