15

在 django 模板中,我想使用对象的 pk 获取对象的名称。例如,假设我有来自 class 的 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. 在模板标签中创建“anyname.py”

任何名字.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 回答