带有flask-bootstrap和flask-nav

时间:2017-03-02 14:45:26

标签: python html twitter-bootstrap flask flash-message

我使用flask-bootstrap将Bootstrap前端用于烧瓶Web应用程序。很遗憾,由于我已开始使用flask-bootstrapflask-nav,因此我无法显示Flash消息。

这是base.html

{% extends 'bootstrap/base.html' %} 
{% block navbar %}
  {{ nav.mynavbar.render() }}
{% endblock %}

<html>
 <body>
    <hr>
    <div class='container'>
      {% with messages = get_flashed_messages() %}
        {% if messages %}
          <ul class=flashes>
          {% for message in messages %}
            <li>{{ message }}</li>
          {% endfor %}
          </ul>
        {% endif %}
      </div>
      {% endwith %}
      {% block content %}{% endblock %}
      </div>
  </body>
</html>

这是在保存更改时应该闪烁消息的视图之一:

@app.route('/model/<model_name>/edit', methods=['GET', 'POST'])
def edit(model_name):
    """Edit model's configuration.

    Args:
        model_name [str]: The name of the model we want to change the
        configuration.
    """
    # return to index page if model is not found in the database
    model = DSModel.query.filter_by(name=model_name).first()
    if not model:
        flash('Model {} not found.'.format(model_name))
        return redirect(url_for('index'))

    # pre-load current model's configuration
    form = ConfigurationForm()

    # if it's a POST request, it means the user is trying to change the model's
    # configuration. Save changes in the database
    if request.method == 'POST':  # and form.validate_on_submit():
        model.configuration.configuration = form.value.data
        model.configuration.datetime = datetime.datetime.utcnow()
        db.session.add(model)
        db.session.commit()

        flash('Your changes have been saved.', 'success')
        return redirect(url_for('edit', model_name=model_name))
    else:
        form.value.data = model.configuration.configuration
    return render_template('edit.html', form=form)

最后,这是__init__.py

from flask import Flask
from flask_bootstrap import Bootstrap
from flask_nav import Nav
from flask_nav.elements import Navbar, View
from flask_sqlalchemy import SQLAlchemy

nav = Nav()

@nav.navigation()
def mynavbar():
    return Navbar(
        'Dashboard',
        View('Home', 'index'),
        View('Login', 'login')
    )


app = Flask(__name__)
Bootstrap(app)
nav.init_app(app)
app.config.from_object('config')
db = SQLAlchemy(app)


from app import views, models

我认为我的base.html文件一定有些时髦,但我对HTML并不十分熟悉,所以我无法找到错误的内容。我已经在线查看了示例(例如here),但格式似乎与我正在做的非常相似。

编辑:这是edit.html文件:

{% extends 'base.html' %}

{% block content %}
<h1>Update configuration</h1>
<form action='' method='post' name='configuration'>
    <p>
    Please update the current model configuration:<br>
    {{ form.value(cols='150', rows='20') }}
    <p><input type='submit' value='Save'></p>
</form>
{% endblock %}

1 个答案:

答案 0 :(得分:0)

尝试将base.html编辑为:

{% extends 'bootstrap/base.html' %} 
{% block navbar %}
  {{ nav.mynavbar.render() }}
{% endblock %}

<html>
 <body>
    <hr>
    <div class='container'>
      {% with messages = get_flashed_messages() %}
        {% if messages %}
          <ul class=flashes>
          {% for message in messages %}
            <li>{{ message }}</li>
          {% endfor %}
          </ul>
        {% endif %}
      {% endwith %}
     </div>
      {% block content %}{% endblock %}
      </div>
  </body>
</html>