djangoテンプレート内で、オブジェクトのpkを使用してオブジェクトの名前を取得したいと思います。たとえば、クラスからのオブジェクトのpkがあるとA
すると、次のようなことをしたいと思います。
{{ A.objects.get(pk=A_pk).name }}
これどうやってするの?
djangoテンプレート内で、オブジェクトのpkを使用してオブジェクトの名前を取得したいと思います。たとえば、クラスからのオブジェクトのpkがあるとA
すると、次のようなことをしたいと思います。
{{ A.objects.get(pk=A_pk).name }}
これどうやってするの?
Djangoテンプレート言語のドキュメントから:
Djangoは、テンプレート言語で使用できるロジック処理の量を意図的に制限しているため、テンプレート内からアクセスされるメソッド呼び出しに引数を渡すことはできません。データはビューで計算してから、表示用のテンプレートに渡す必要があります。
ご覧のとおり、これを計算する必要がありますviews.py:
def my_view(request, A_pk):
...
a = A.objects.get(pk=A_pk)
...
return render_to_response('myapp/mytemplate.html', {'a': a})
そしてあなたのテンプレートで:
{{ a.name }}
{{ a.some_field }}
{{ a.some_other_field }}
必要に応じて、独自のタグを追加できます。このような:
from django import template
register = template.Library()
@register.simple_tag
def get_obj(pk, attr):
obj = getattr(A.objects.get(pk=int(pk)), attr)
return obj
次に、テンプレートにタグをロードします
{% load get_obj from your_module %}
そしてそれを使用します
{% get_obj "A_pk" "name" %}
Djangoではそれを行うことはできません。ドキュメントから:
Djangoは、テンプレート言語で使用できるロジック処理の量を意図的に制限しているため、テンプレート内からアクセスされるメソッド呼び出しに引数を渡すことはできません。データはビューで計算してから、表示用のテンプレートに渡す必要があります。
何を達成しようとしているのかは明確ではありませんが、ビューで目的の結果を達成し、変数またはオブジェクトをテンプレートに送信する方法を理解する必要があります。
モジュール内に「templatetags」という名前のフォルダを作成します。
templatetags内に「anyname.py」を作成します
anyname.py
from django import template
from Clients.models import Client
register = template.Library()
@register.filter
def get_client_name(pk, attr):
obj = getattr(Client.objects.get(id=pk),attr)
return obj
今テンプレートに追加します
{% load get_client_name from anyname %}
{{project.Client_id|get_client_name:'Name_of_client' }}
また、カスタムタグのdjangoドキュメントを確認することもでき ます