我在做这将从查询集来显示对象列表的通用模板:在Django中基于捕获的URL参数过滤QuerySet?
{% for o in objects %}
{{ o.name }}
{% endfor %}
我希望能够使用在多个场合,模板,其中不同类型的过滤和排序需要做完了。我创建了一个视图功能是:
def display_objects(request, filters, orders, template_name):
objects = Object.objects.all()
for filter in filters:
objects = objects.filter(('%s__%s' % (filter['field'], filter['relationship']), filter['value']))
for order in orders:
objects = objects.order_by('-' if 'descending' in order else '' + order['field'])
# render objects to template with context
pass
我不知道如果我做了什么至今仍然工作,但我碰到的一个问题。我不知道用当前函数过滤URL中捕获的参数设置的查询是否可行。
例如,如果我想显示与特定的用户我会做一些这样的对象:
(r'^user/(?P<account_username>[^/]+)/$', display_objects, dict(filters=[{'field':'account__username','relationship':'iexact','value':account_username}], orders=[{'field':'foobar'}], template_name='user.html'))
显然,account_username是不是一个定义的字段,直到URL被解析并分发到display_objects功能。制作一个带有account_username参数的视图函数会很容易,但我希望能够使用该函数来显示其他对象查询集,这些查询集将用不同的捕获参数进行过滤。
是否有某种方法可以将捕获的URL参数传递给视图函数来动态地过滤或排序查询集以显示?
正如我想到的那样,我意识到,我构建视图函数的方式可能不是最优的。对于如何动态过滤并为模板排序查询集,您有任何建议吗? – mburke13 2012-04-09 22:52:45