Django模板对象属性查找与动态变量名称

时间:2011-10-04 12:35:45

标签: django django-templates

我有一张桌子,上面有用户,等级,深蹲,硬拉,台式,清洁,挺举和抢夺。

排名系统将对任何数量的组合进行排序,从仅仅总数量Squated到总数量的压缩和举重到所有五个学科提升的总量。正如您所看到的,有大量可用组合可供用户查看其排名。虽然我还要煞费苦心地将所有这些排名组合添加到我的数据库中,但我已经完成了主要的5即SQ_rank。

在我的视图文件中,我完成了以下操作,其中request.GET获得'SQ','DL','BP','Snatch'或'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])) 

现在我想将排名作为我模板中的变量。它将返回一些_rank,例如SQ_rank或DL_rank,它位于我的数据库中。

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

如何在没有{%ifequal%}}堆加载的情况下执行此操作,以确定当我将它们添加到数据库时可用的所有可变组合?这一切都有意义吗

1 个答案:

答案 0 :(得分:0)

首先:

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

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