2012-12-13 10 views
10

Wewnątrz szablonu django, chciałbym uzyskać nazwę obiektu za pomocą obiektu pk. Na przykład, biorąc pod uwagę, że mam PK obiektu z klasy A, chciałbym zrobić coś jak następuje:Jak zdobyć obiekt z PK wewnątrz szablonu Django?

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

Jak mogę to zrobić?

+5

To nie jest możliwe, należy to robić w swoim views.py: 'a = A.objects.get (pl = A_pk) 'następnie pokaż go w swoim szablonie:' {{a.name}} ' –

Odpowiedz

11

Od docs na The Django Template Language:

Accessing method calls:

Ponieważ Django celowo ogranicza ilość przetwarzania logicznego dostępne w języku szablonów, nie jest możliwe aby przekazywać argumenty do wywołania metod dostępnych od wewnątrz szablony. Dane powinny być obliczane w widokach, a następnie przekazywane do szablonów do wyświetlenia.

Więc widzisz, powinieneś być obliczenie tego w 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 w szablonie:

{{ a.name }} 
{{ a.some_field }} 
{{ a.some_other_field }} 
2

Nie można tego zrobić w Django. From the docs:

Ponieważ Django celowo ogranicza ilość przetwarzania logicznego dostępnej w języku szablonów, nie jest możliwe aby przekazywać argumenty do wywołania metod dostępnych od wewnątrz szablonów. Dane powinny być obliczane w widokach, a następnie przekazywane do szablonów do wyświetlenia.

0

Nie wiadomo dokładnie, co chcesz osiągnąć, ale trzeba dowiedzieć się, w jaki sposób można osiągnąć pożądany efekt w widoku i wysłać zmiennej lub obiektu do szablonu.

7

Możesz dodać własny tag, jeśli chcesz. Tak:

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 

Następnie tag obciążenie w szablonie

{% load get_obj from your_module %} 

i używać go

{% get_obj "A_pk" "name" %} 
Powiązane problemy