Использование шаблонов колб, вызывающих дублирование HTML - PullRequest
0 голосов
/ 06 июня 2018

По какой-то причине, когда я использую дочерние шаблоны с блоками во Flask, мой HTML-контент отображается как дубликаты.Я использую Bootstrap и Bokeh для визуализации графиков.Каждый элемент div в моем дочернем шаблоне Dashboard.html отображается с дубликатами.Кто-нибудь знает, почему это может иметь место?Я неправильно настроил шаблон?

Ниже приведен мой файл layout.html:

Layout.html

    <!doctype html>
<html lang="en">
  <head>
    <link type="text/css" href="index.css" />
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">
    <link rel="stylesheet" href="http://cdn.pydata.org/bokeh/release/bokeh-0.12.16.min.css" type="text/css" />
  <script type="text/javascript" src="http://cdn.pydata.org/bokeh/release/bokeh-0.12.16.min.js"></script>
    <title>Embed Demo</title>

  </head>
  <body>


{% block body %}{% endblock %}


<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js" integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl" crossorigin="anonymous"></script>
  </body>
</html>

Это мой дочерний файл шаблона:

Dashboard.html

 {% extends "layout.html" %}
{% block body %}
    {% for plot in plots %}
        {% for part in plot %}
        <div class="container-fluid">
          <div class="row">
            <div class="col" id="graphblock">
                  {{part | safe}}
            </div>
            <div class="col" id="graphblock">
                   {{part | safe}}
            </div>
          </div>
        </div>
        {% endfor %}
    {% endfor %}
{% endblock %}

Вот мой сервер Flask:

Server.py

import random
from flask import Flask, render_template
from bokeh.plotting import figure
from bokeh.embed import components

app = Flask(__name__, static_folder='../static/dist', template_folder='../static/client')

@app.route('/dashboard/')
def show_dashboard():
    plots = []
    plots.append(make_plot())

    return render_template('dashboard.html', plots=plots)

def make_plot():
    plot = figure(plot_height=300, sizing_mode='scale_width')

    x = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    y = [2**v for v in x]

    plot.line(x, y, line_width=4)

    script, div = components(plot)
    return script, div

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

1 Ответ

0 голосов
/ 08 июня 2018

Ваш шаблонный цикл неверен.plot в вашем списке plots выглядит так: (script, div).Вы перебираете все plot в plots, но затем вы также делаете это:

{% for part in plot %}
<div class="container-fluid">
  <div class="row">
    <div class="col" id="graphblock">
      {{part | safe}}
    </div>
    <div class="col" id="graphblock">
      {{part | safe}}
    </div>
  </div>
</div>
{% endfor %}

Первая итерация по части дважды включает в себя скрипт, затем следующая итерация дважды включает div.Это заставляет вещи дублироваться.

...