web-dev-qa-db-ja.com

Djangoテンプレートで引数を取る関数を呼び出す方法は?

いくつかのレコードを返す関数をDjangoのテンプレートに渡します。この関数を呼び出して、その結果を繰り返したいと思います。

{% for item in my_func(10) %} 

それは機能しません。関数の戻り値を変数に設定し、変数を反復処理しようとしましたが、Djangoテンプレートで変数を設定する方法はないようです。

それを行う通常の方法はありますか?

49
cleg

テンプレートで引数を必要とする関数を呼び出すことはできません。 書き込み 代わりにテンプレートタグまたはフィルター。

オブジェクトがある場合は、@propertyとして定義できるため、呼び出しなしで結果を取得できます。

class Item:
    @property
    def results(self):
        return something

次にテンプレートで:

<% for result in item.results %>
...
<% endfor %>
19
sherpya

Djangoのテンプレートに関数を渡します。この関数はレコードを返します

関数の代わりに、関数の戻り値を格納する変数をDjangoテンプレートに渡してみませんか?


Fuctionの戻り値を変数に設定して変数を反復処理しようとしましたが、Djangoテンプレートで変数を設定する方法はないようです。

テンプレートの代わりにDjangoビューで変数を設定し、テンプレートに渡します。

10
dolma33

設計上、Django=テンプレートは任意のPythonコードを呼び出すことはできません。これは、デザイナーがテンプレートを記述する環境のセキュリティおよび安全機能であり、ビジネスロジックも防止しますテンプレートへの移行。

これを行うには、Jinja2テンプレート( http://jinja.pocoo.org/docs/ )、またはこれをサポートする他のテンプレートシステムを使用するように切り替えることができます。 Djangoの他の部分は、意図的に一方向のプロセスであるため、使用するテンプレートの影響を受けません。必要に応じて、同じプロジェクトで多くの異なるテンプレートシステムを使用できます。

5
Marcin

できることは、別のテンプレートファイルとして「関数」を作成し、そのファイルにパラメータを渡すファイルを含めることです。

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>&nbsp;Download</a>

</div>
</li>
{% endfor %}
</ul>
1
sidmanu