在Django模板(object.x)中动态显示字段值

时间:2009-11-12 19:02:25

标签: python django django-models django-templates

我目前正在开发一个使用自定义注释查询集的应用。目前我有2个网址设置,但我需要一个用户希望汇总数据的每个字段。这可以手动配置,但它会违反DRY!我基本上会有+ -8网址基本上做同样的事情。

所以这就是我所做的,

  1. 我有一个创建的自定义模型管理器
  2. 我有一个观点
  3. 我已配置URLS
  4. 以上所有作品。

    因此,基本上URL配置将要注释的字段的名称传递给视图(对于SQL人员分组),视图会执行一些额外的处理,并根据传递给它的字段运行自定义模型管理器。

    网址如下所示:

    url('^(?P<field>[\w-]+)/(?P<year>\d{4})/(?P<month>\d+)/(?P<day>\d+)/$','by_subtype', name='chart_link'),
    

    字段是db中实际运行查询集时使用的列。它从视图传递到我的自定义管理器。以下是经理代码的示例:

    return self.filter(start_date_time__year=year).filter(start_date_time__month=month).filter(start_date_time__day=day).values(field).annotate(Count(field))
    

    此外,我将 field 的值作为上下文变量传递。这用于动态构建链接。但问题实际上是遍历查询集并显示数据。

    因此,典型的模板代码如下所示:

    {% for object in object_list %}
    {{ object.sub_type }} : {{ object.sub_type__count|intcomma }}
    {% endfor %}
    

    基本上你必须将字段硬编码为diplay(即object.x),无论如何都要动态分配这个吗?即 如果field = business 然后在模板中它应该自动处理:

    {{ object.business }}
    

    可以这样做吗?或者我需要创建几个URL?或者是否有更好的方法来实现相同的结果,单个视图和url动态处理查询。

    您可以在github上找到代码,模板部分现在正在使用此代码段:http://www.djangosnippets.org/snippets/1412/因此,如果您稍后遇到此问题并希望执行类似操作,请查看github上的代码段。 :http://gist.github.com/233262

1 个答案:

答案 0 :(得分:1)

听起来你想要按照以下方式做点什么:

# in the views.py:
field = 'business'


{# in the template: #}
{{ object.field }}

并在输出中显示object.business的值。使用开箱即用的Django模板语言是不可能的。

有些片段定义了您可以用来实现此目的的模板过滤器:http://www.djangosnippets.org/snippets/1412/