如何从Django模板中的PK中获取对象?

use*_*064 13 python django django-templates

在django模板中,我想使用对象的pk获取对象的名称.例如,鉴于我有来自类的pk对象A,我想做类似以下的事情:

{{ A.objects.get(pk=A_pk).name }}
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

Cés*_*sar 13

来自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})
Run Code Online (Sandbox Code Playgroud)

在您的模板中:

{{ a.name }}
{{ a.some_field }}
{{ a.some_other_field }}
Run Code Online (Sandbox Code Playgroud)


小智 9

如果您愿意,可以添加自己的标签.像这样:

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
Run Code Online (Sandbox Code Playgroud)

然后在模板中加载标记

{% load get_obj from your_module %}
Run Code Online (Sandbox Code Playgroud)

并使用它

{% get_obj "A_pk" "name" %}
Run Code Online (Sandbox Code Playgroud)