Flask: Как включить html с заполнителями в несколько файлов шаблонов? - PullRequest
0 голосов
/ 16 ноября 2018

Я создаю веб-сайт с флягой и столкнулся со следующей проблемой: у меня есть несколько разных страниц, которые используют одну и ту же панель навигации.До сих пор я только что скопировал и вставил HTML-код, который генерирует панель навигации, в каждый из файлов, но это кажется неэффективным.

Одним из решений, о котором я подумал, было просто поставить {{navbar | safe}} в каждомфайлов шаблонов, а затем сохраните html navbar в одном файле и передайте его в качестве аргумента для render_template.Тем не менее, код navbar также содержит заполнители, так что это не работает.

Что было бы хорошим подходом для достижения этой цели?

Ответы [ 2 ]

0 голосов
/ 16 ноября 2018

Проверьте объяснение пользователя @ Niche.P.Я просто хотел бы добавить свой личный проект для более практического примера.

Здесь вы можете видеть, что я включаю навигационную панель, как он сказал из партиальных папок.

Если вы отметитеМоя папка templates , вы увидите, что все шаблоны включают панель навигации с этим одним оператором, а панель навигации находится в папке partials .

0 голосов
/ 16 ноября 2018

Одно из моих предложений - использовать {% include "nav.html"%}

Где nav.html содержит только вашу панель навигации.

Используя {% include%}, вы можете разместить одну и ту же панель навигации на разных страницах.

Например, мой master.html может иметь эту настройку.

master.html

{% include "nav.html" %} <!-- your nav html goes here -->

<!-- Section block for item in the page -->
<div class="main">
    <div class = "container">
        {% block section %}

        {% endblock %}
    </div>
</div>

Для заполнителя {% include%} также позволяет передавать аргументы в nav.html.

Однако, если я правильно понимаю, что вы используете местозаполнитель, это означает, что ваша навигация основана на аргументах. Таким образом, вам нужно передать некоторые переменные.

Давайте посмотрим на очень простую навигацию.

nav.html

<ul>
  <li><a class="active" href="#home">Home</a></li>
  <li><a href="{{link_1}}">{{name_1}}</a></li>
  <li><a href="#"">Contact</a></li>
  <li><a href="#">About</a></li>
</ul>

app.py

@app.route('/', methods=['GET'])
def landing():
    return render_template('pages/landing_page.html', link_1="somelink", name_1="News")

landing_page.html

{% extends "master_main.html" %}

{% block section %}

    <div class = "content">
       This is my content
    </div>

{%  endblock %}

Вы можете видеть, что landing_page.html расширяет master.html, в котором есть nav.html.

Следовательно, каждая страница, которую вы расширяете master.html, будет иметь одну и ту же панель навигации.

include позволяет передавать аргументы в nav.html, поскольку вы можете видеть, что я передал link_1 и name_1

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...