2016-10-09 30 views
0

我使用Jinja2來渲染我的前端(並且python在後端)。每個頁面都會有不同的圖像在其頂部,這樣的:Jinja2中的url_for()中的塊標記

<header> 
    <img src="static/img/pic1.png"> 
</header> 

我以前url_for()讓我的靜態文件夾的正確路徑:

<header> 
    <img src="{{ url_for('static', filename='img/pic1.png') }}"> 
</header> 

到目前爲止,一切都很好。但我想在文件名參數中加入一個塊,這樣我就可以重新使用代碼並只覆蓋圖像的名稱。這就是我想:

<header> 
    <img src="{{ url_for('static', filename='{% block img %}img/pic1.png{% endblock %}') }}"> 
</header> 

但它不工作,這是一個被渲染的Jinja2最終代碼:

<header> 
    <img src="/static/%7B%25%20block%20img%20%25%7Dimg/pic1.png%7B%25%20endblock%20%25%7D"> 
</header> 

正如你所看到的,Jinja2的不承認將標記爲表達式並將其視爲字符串。如果它能工作,我將能夠使用此代碼設置每個頁面的圖片:

{% extends "base.html" %} 
{% block img %}img/pic2.png{% endblock %} 
... 

請問有人可以幫忙嗎?順便說一下,this後沒有幫助我。

回答

3

你需要的是一個在你的模板中定義一種功能。見 http://jinja.pocoo.org/docs/dev/templates/

{% macro header_img(name) -%} 
    <img src="{{ url_for('static', filename=name) }}"> 
{%- endmacro %} 

這個話題,你可以把這個宏在UTIL模板import它的每一頁。

使用語法:

<header>{{ header_img("your_image.jpg") }}</header> 
+0

怎麼其他頁面將重用這個代碼來生成*例如IMG/PIC2 *? – renatov

+1

那麼我添加鏈接到文檔(這是非常好的)和一個小例子。 –

+0

謝謝,它的工作,但我不必導入,如果我只擴展具有宏的模板。如果可以的話,請在沒有導入的情況下舉個簡單的例子,我會選擇你的帖子作爲回答,以供進一步參考。 – renatov