15

djangoテンプレート内で、オブジェクトのpkを使用してオブジェクトの名前を取得したいと思います。たとえば、クラスからのオブジェクトのpkがあるとAすると、次のようなことをしたいと思います。

{{ A.objects.get(pk=A_pk).name }}

これどうやってするの?

4

5 に答える 5

16

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 }}
于 2012-12-13T19:49:42.887 に答える
10

必要に応じて、独自のタグを追加できます。このような:

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" %}
于 2012-12-18T06:50:28.613 に答える
2

Djangoではそれを行うことはできません。ドキュメントから:

Djangoは、テンプレート言語で使用できるロジック処理の量を意図的に制限しているため、テンプレート内からアクセスされるメソッド呼び出しに引数を渡すことはできません。データはビューで計算してから、表示用のテンプレートに渡す必要があります。

于 2012-12-13T19:50:36.507 に答える
0

何を達成しようとしているのかは明確ではありませんが、ビューで目的の結果を達成し、変数またはオブジェクトをテンプレートに送信する方法を理解する必要があります。

于 2012-12-13T22:05:15.140 に答える
0
  1. モジュール内に「templatetags」という名前のフォルダを作成します。

  2. 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ドキュメントを確認することもでき ます

于 2020-04-13T05:10:13.983 に答える