我傳遞給Django的模板一個函數,它返回一些記錄。 我想調用這個函數並迭代它的結果。如何調用在Django模板中引用參數的函數?
{% for item in my_func(10) %}
這是行不通的。 我試着將函數的返回值設置爲一個變量並迭代變量,但似乎沒有辦法在Django模板中設置變量。
有沒有正常的方法來做到這一點?
我傳遞給Django的模板一個函數,它返回一些記錄。 我想調用這個函數並迭代它的結果。如何調用在Django模板中引用參數的函數?
{% for item in my_func(10) %}
這是行不通的。 我試着將函數的返回值設置爲一個變量並迭代變量,但似乎沒有辦法在Django模板中設置變量。
有沒有正常的方法來做到這一點?
您無法調用模板中需要參數的函數。 Write改爲模板標記或過濾器。
按照設計,Django模板不能調用任意的Python代碼。這是設計人員編寫模板的環境的安全和安全功能,同時也防止業務邏輯遷移到模板中。
如果你想這樣做,你可以切換到使用Jinja2模板(http://jinja.pocoo.org/docs/),或者任何你喜歡的模板系統來支持它。 django的其他部分不會受到您使用的模板的影響,因爲它是故意單向過程。如果您願意,您甚至可以在同一個項目中使用許多不同的模板系統。
如果你有一個對象,你可以定義它爲@property
,這樣你就可以在沒有呼叫的情況下得到結果,例如,
class Item:
@property
def results(self):
return something
然後在模板:
<% for result in item.results %>
...
<% endfor %>
你可以做的是,創造了「功能」作爲另一個模板文件,然後包括文件傳遞參數給它。
裏面的index.html
<h3> Latest Songs </h3>
{% include "song_player_list.html" with songs=latest_songs %}
內song_player_list.html
<ul>
{% for song in songs %}
<li>
<div id='songtile'>
<a href='/songs/download/{{song.id}}/'><i class='fa fa-cloud-download'></i> Download</a>
</div>
</li>
{% endfor %}
</ul>
我怎樣才能控制'{%include「song_player_list.html」with songs = latest_songs%}「'只有當按鈕被點擊時才能執行。我試圖把它放在一個函數中,但是'Django模板'在我每次加載頁面時都執行它。 – 2017-05-30 07:37:12
很傷心。我想要一個更簡單的方法。 – cleg 2010-03-18 17:16:33
我認爲使用內建的python'@ property'解決方案是更好的解決方案,當然,這取決於具體情況。 – jrast 2014-05-04 11:02:35
是的,但是這並不能解決問題。如果Django不需要參數,它會自動調用函數。寫作'{%的項目在MYFUNC%}'等同於'在MYFUNC項目()'如果MYFUNC是不帶參數的函數。 Django的唯一真正的限制是調用需要的參數,它'@ property'不能解決的功能(但無可否認,你可以在模板中設置一些屬性,並把它們作爲參數,但不是特別乾淨要麼) – matts1 2014-12-17 04:48:14