Как получить объект из PK внутри шаблона Django?

Внутри шаблона django я хотел бы получить имя объекта, используя объект pk. Например, учитывая, что у меня есть pk объекта из класса A, я хотел бы сделать что-то вроде следующего:

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

Как я могу это сделать?

Ответ 1

Из документов на Язык шаблонов 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 }}

Ответ 2

Вы можете добавить свой собственный тег, если хотите. Вот так:

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" %}

Ответ 3

Вы не можете сделать это в Django. Из документов:

Поскольку Django намеренно ограничивает объем логической обработки, доступной на языке шаблона, невозможно передать аргументы вызовам методов, доступным изнутри шаблонов. Данные должны вычисляться в представлениях, затем передаваться в шаблоны для отображения.

Ответ 4

Непонятно, что именно вы пытаетесь выполнить, но вы должны выяснить, как вы можете достичь желаемого результата в представлении и отправить переменную или объект в шаблон.