2022年5月5日 星期四

CKAN v2.9 templates 4: {% ckan_extends %} {% block %} {{ super() }}

{% ckan_extends %}

用 Jinja 的 {% ckan_extends %} 可讓自訂 template 「擴充」預設內容,而不是取代它。

修改 index.html

修改上個 tutorial 產生的 home/index.html 如下:

{% ckan_extends %}

重新瀏覽 CKAN 首頁,自訂 index.html 裡的 {% ckan_extends %} 告訴 CKAN 先執行原本的 home/index.html。

{% block %}

Jinja templates 中可嵌入 block 讓其它 templates 取代其內容,如 CKAN 預設 /usr/lib/ckan/default/src/ckan/ckan/templates/home/layout1.html:


<div role="main">
  <div class="main hero">
    <div class="container">
      <div class="row row1">
        <div class="col-md-6 col1">
          {% block promoted %}
            {% snippet 'home/snippets/promoted.html' %}
          {% endblock %}
        </div>
        <div class="col-md-6 col2">
          {% block search %}
            {% snippet 'home/snippets/search.html' %}
          {% endblock %}
        </div>
      </div>
    </div>
  </div>
  <div class="main">
    <div class="container">
      <div class="row row2">
        <div class="col-md-6 col1">
          {# Note: this featured_group block is used as an example in the theming
             tutorial in the docs! If you change this code, be sure to check
             whether you need to update the docs. #}
          {# Start template block example. #}
          {% block featured_group %}
            {% snippet 'home/snippets/featured_group.html' %}
          {% endblock %}
          {# End template block example. #}
        </div>
        <div class="col-md-6 col2">
          {% block featured_organization %}
            {% snippet 'home/snippets/featured_organization.html' %}
          {% endblock %}
        </div>
      </div>
    </div>
  </div>
</div>

CKAN 支援不同的layout: layout1, layout2, layout3 等。由 sysadmin 在 admin 頁設定。假設使用第一個 layout1.html。

以 {% ckan_extends %} 擴充 CKAN 預設的 template,可用 {% block %} 取代預設 template 中的任何 block。

新增 layout1.html

建立 ckanext-example_theme/ckanext/example_theme/templates/home/layout1.html ,內容如下:

{% ckan_extends %}

{% block featured_group %}
  取代原本的 featured_group: Hello block world!
{% endblock %}

這個檔案擴充原本的 layout1.html,覆寫其中的 featured_group block。

重啟 web server,瀏覽 CKAN 首頁,可看到 featured_group 區塊已被取代為 Hello block world!,但其它內容都沒有動。


{{ super() }}

{{ super() }} 可在 block 加入內容,而不是取代它。

修改:layout1.html

{% ckan_extends %}

{% block featured_group %}
    <p>這段文字會出現在 <code>featured_group</code> block 上方</p>      
    {{ super() }}
    <p>這段文字會出現在 <code>featured_group</code> block 下方</p>
{% endblock %}

以上 block 執行時,{{ super() }} 會被 parent block 的內容取代。



沒有留言:

張貼留言