2012-12-13 50 views
10

在django模板里面,我想用对象的pk来获取对象的名字。举例来说,假设我有一个从A类对象的PK,我想这样做如下:如何从Django模板中的PK获取对象?

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

我怎样才能做到这一点?

+5

这是不可能的,你应该做的是在你的views.py:'A = A.objects.get(pl = A_pk)'然后在模板中显示:'{{a.name}}' –

回答

11

从文档上The Django Template Language

Accessing method calls

由于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

你不能这样做,在Django。​​

由于Django有意限制模板语言中可用的逻辑处理量,因此不可能将参数传递给从模板内访问的方法调用。数据应该在视图中计算,然后传递给模板进行显示。

0

目前尚不清楚你想要完成什么,但你应该弄清楚如何在视图中实现你想要的结果并将变量或对象发送到模板。

7

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

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" %} 
相关问题