Шаблон панели Python изменит заголовок с приложения Bokeh на MyApp

Я использую пример https://panel.pyviz.org/user_guide/Templates.html и хотел бы изменить заголовок с «Приложение с эффектом боке» на «Мое приложение».

import panel as pn
import holoviews as hv
from jinja2 import Environment, FileSystemLoader

pn.extension()
env = Environment(loader=FileSystemLoader('.'))
jinja_template = env.get_template('z_base.html')

tmpl = pn.Template(jinja_template)

tmpl.add_panel('A', hv.Curve([1, 2, 3]))
tmpl.add_panel('B', hv.Curve([1, 2, 3]))

tmpl.show();

с расширением базы html z_base.html:

{% extends base %}

<title>{% block title %}My App{% endblock %}</title> <!-- THIS DOES NOT WORK !!!! -->

{% block postamble %}
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css">    
{% endblock postamble %}


{% block contents %}

<h1>Custom Template App 3</h1>
<p>This is a Panel app with a custom template allowing us to compose multiple Panel objects into a single HTML document.</p>
<br>
<div class="container">
  <div class="row">
    <div class="col-sm">
     {{ embed(roots.A) }}
    </div>
    <div class="col-sm">
      {{ embed(roots.B) }}
    </div>
  </div>
</div>

{% endblock %}

базовый шаблон относится к title <title>{% block title %}{{ title | e if title else "Panel App" }}{% endblock %}</title>

<!DOCTYPE html>
<html lang="en">
{% block head %}
<head>
    {% block inner_head %}
    <meta charset="utf-8">
    <title>{% block title %}{{ title | e if title else "Panel App" }}{% endblock %}</title>
    {% block preamble %}{% endblock %}
    {% block resources %}
        {% block css_resources %}
        {{ bokeh_css | indent(8) if bokeh_css }}
        {% endblock %}
        {% block js_resources %}
        {{ bokeh_js | indent(8) if bokeh_js }}
        {% endblock %}
    {% endblock %}
    {% block postamble %}{% endblock %}
    {% endblock %}
</head>

Как передать переменную заголовка в базовый шаблон?


person Michel Latch    schedule 31.10.2019    source источник


Ответы (2)


Ответ @EMayorga не сработал, но я думаю, что он предназначен для расширения и реализации этого блока. Я заставил его работать, сделав это в моем шаблоне:

{% extends base %}

{% block title %}
{{ html_title }}
{% endblock %}

<!-- goes in body -->
{% block postamble %}
<link rel="stylesheet" href="https://stackpath.bootstrapcd ... 
...

А затем в питоне: tmpl.add_variable('html_title', 'Demo 23')

person marckassay    schedule 19.08.2020

У меня была такая же потребность, и я не мог найти ответа нигде в документации. Ваш вопрос здесь помог мне, поэтому я хотел сообщить о простом решении, которое я нашел.

В итоге я просмотрел panel.template код модуля и API doc для поиска подсказок. Оказывается, вы можете передать свой собственный заголовок методам servable или show. В вашем коде это будет выглядеть так:

tmpl.show(title="My App");

Я тестировал его как servable, так и show методами.

person EMayorga    schedule 20.04.2020
comment
Спасибо за продолжение! Я забыл об этом посте и наткнулся на него только сейчас. - person marckassay; 03.02.2021