使用动态变量名查找Django模板对象属性

使用动态变量名查找Django模板对象属性,django,django-templates,Django,Django Templates,我有一张桌子,上面有使用者、排名、下蹲、空举、长凳、挺举和抓举 排名系统将对任意数量的组合进行排名,从蹲起的总数量,到板凳加压和死举的总数量,再到所有五个学科的总举起量。正如你所看到的,有大量可用的组合,用户可以通过这些组合来检查自己的排名。虽然我还没有煞费苦心地将所有这些排名组合添加到我的数据库中,但我已经完成了主要的5个ie SQ_排名 在我的视图文件中,我执行了以下操作,其中request.GET获取'SQ'、'DL'、'BP'、'scrapt'或'CJ': def rankings()

我有一张桌子,上面有使用者、排名、下蹲、空举、长凳、挺举和抓举

排名系统将对任意数量的组合进行排名,从蹲起的总数量,到板凳加压和死举的总数量,再到所有五个学科的总举起量。正如你所看到的,有大量可用的组合,用户可以通过这些组合来检查自己的排名。虽然我还没有煞费苦心地将所有这些排名组合添加到我的数据库中,但我已经完成了主要的5个ie SQ_排名

在我的视图文件中,我执行了以下操作,其中request.GET获取'SQ'、'DL'、'BP'、'scrapt'或'CJ':

def rankings()
    a = ''
    for i in request.GET:
        a += i    
    b = a + '_rank'    
    query_results = UserProfile.objects.all().order_by(a)
    rank = b
    return render_to_response('registration/rankings.html',{'query_results': query_results, 'rank': rank,}, context_instance=RequestContext(request, processors=[custom_proc])) 
现在我想把排名作为模板中的一个变量。它将返回我的数据库中的一些_秩,比如SQ_秩或DL_秩

{% for item in query_results %}
    <tr>
    <td>{{ item.user }}</td>
    <td>{{ items.??? }}</td>
    <td>{{ item.SQ }}</td>
    <td>{{ item.DL }}</td>
    <td>{{ item.BP }}</td>
    <td>{{ item.CJ }}</td>
    <td>{{ item.Snatch }}</td>
    </tr>
{% endfor %}
{%用于查询结果%中的项]
{{item.user}
{{项.??}
{{item.SQ}}
{{item.DL}}
{{item.BP}
{{item.CJ}
{{item.swatch}
{%endfor%}
我如何做到这一点,而不让{%ifequal%}标记的堆负载占据所有可变组合,这些组合将在我着手将它们添加到数据库时可用?所有这些都有意义吗首先:

for i in request.GET:
无效,因为request.GET是dict,而不是列表。如果你所说的项目是什么意思。???要查找名称包含在“rank”变量中的item属性,我使用以下方法:

{{ item|ofKey:rank }}
“ofKey”是一个自定义模板过滤器。创建一个名为
extra.py
的文件,该文件包含:

from django import template
register = template.Library()

@register.filter
def ofKey(value, arg):
    if value:
        return value.get(arg)
    else:
        return ""
现在将此文件保存在某个应用程序目录的“templatetags”子目录中。您需要使用:

{% load extra %}

在模板的开头,您将需要它。

只有在我取出{%load extra%}中的“”时,才能加载extra。然后,我得到一个错误“在呈现时捕获AttributeError:Manager无法通过UserProfile实例访问”,然后突出显示行“{%for query\u results%}”Ok,所以“value”表示“item”,而“item”又表示UserProfile对象的实例。因此,必须简单地检查userprofile对象实例的本机函数。快速执行此操作的一种方法是在extra.py返回行中键入dir(value)。然后它将输出(无限制地)本机函数。“get”不存在,但getattribute存在。因此,它现在起作用了。非常感谢。