У меня есть вопрос, если это возможно. У меня есть страница layout.html, которая связана с home.html. Внутри home.html у меня есть элемент таблицы. Я тоже пытаюсь получить содержимое таблицы из table.html.

Вы можете увидеть в коде, что я пробовал. Любые знания, если это вообще возможно?

Layout.html

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Armering bestilling</title>
</head>
<body>
    {% block content %}

    {% endblock %}
</body>
</html>

Home.html

{% extends "layout.html" %}
{% block content %}
<div id="accordion">
    <div class="card bg-dark">
        <div class="card-header text-white bg-dark mb-3" id="headingOne">
            <h5 class="mb-0">
                <button class="btn text-light" data-toggle="collapse" data-target="#collapseOne" aria-expanded="true"
                    aria-controls="collapseOne">
                    Armering bunnplate
                </button>
            </h5>
        </div>
        <div id="collapseOne" class="collapse" aria-labelledby="headingOne" data-parent="#accordion">
             <table class="table table-striped table-dark" align="center">
                <thead>
                  {% extends "table.html" %}
                  {% block content %}
                  {% endblock content %}
              </thead>
        </div>
    </div>
</div>

{% endblock content %}

Table.html

{% block content %}
<tr>
    <td><input type="checkbox" name="name1" />&nbsp;</td>
    <td>FB1</td>
    <td>001</td>
    <td>00</td>
    <td>STK</td>
    <td>B500NC</td>
    <td>25.0</td>
    <td>20.0</td>
    <td>None</td>
    <td>None</td>
    <td>6575.0</td>
    <td></td>
    <td></td>
    <td></td>
    <td></td>
    <td></td>
    <td></td>
    <td></td>
    <td>6.58</td>
</tr>
 {% endblock content %}
0
Kickdak 5 Фев 2020 в 22:38

2 ответа

Jinja 2.11 теперь поддерживает вложенные шаблоны.

Если вы не используете версию 2.11 и работаете над небольшим приложением, я бы предложил обновить Flask, запустив pip install Flask --upgrade.

Затем попробуйте сделать своего table.html потомком Home.html

Тем не менее, если вы заинтересованы в использовании более старой версии. Вам нужно будет найти обходной путь, как предлагали другие.

0
Taylor Cochran 6 Фев 2020 в 01:54

Я думаю, что Jinja2 поддерживает только один уровень наследования. Вы можете быть в состоянии достичь того, что вы пытаетесь сделать, используя включает.

layout.html :

<html>
<body>
  {% block content %}
  {% endblock %}
</body>

child.html :

{% extends "layout.html" %}

{% block content %}
  {% with objects = some_objects %}
    {% include "table.html" %}
  {% endwith %}
{% endblock %}

table.html :

{% for object in objects %}
  {{ object.name }}
  {{ object.desc }}
{% endfor %}

Это будет работать, когда вы визуализируете шаблон с таким кодом, как:

d = [ {'name':'a', 'desc':'b'},
      {'name':'c', 'desc':'d'}
    ]
return render_template('child.html', some_objects = d)

Кроме того, если вы хотите передать несколько переменных, этот синтаксис действителен для тега with:

{% with objects = some_objects, title = title %}

Протестировано с Jinja2==2.10.3

0
v25 5 Фев 2020 в 20:13