0

我正在运行示例https://panel.pyviz.org/user_guide/Templates.html并希望将标题从“Bokeh Application”更改为“My App”。

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>

如何将标题变量传递给基本模板?

4

2 回答 2

1

我有同样的需求,在文档的任何地方都找不到答案。您在这里的问题帮助指导了我,所以我想报告我找到的简单解决方案。

我最终通过panel.template 模块代码API 文档来寻找提示。事实证明,您可以将自定义标题传递给servableorshow方法。在您的代码中,它看起来像这样:

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

我已经用servableshow方法对其进行了测试。

于 2020-04-20T21:17:45.273 回答
0

@EMayorga 的回答没有用,但我认为它的目的是扩展和实现该块。我在我的模板中这样做了:

{% extends base %}

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

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

然后在python中:tmpl.add_variable('html_title', 'Demo 23')

于 2020-08-19T20:02:40.723 回答