Django:我应该使用查询字符串还是清理网址来映射显示参数?如何?

时间:2011-06-13 20:09:09

标签: django query-string django-urls

我有以下urlconf:

urlpatterns = patterns('page.manager.views',
    url(r'^$', 'pages', name='page_manager-pages'),
    url(r'^add/$', 'add_page', name='page_manager-add_page'),
    url(r'^(?P<page_id>\d+)/', include(object_patterns)),    
)

'pages'视图必须返回所有页面的对象列表。用户将通过侧边菜单提供多个显示/搜索选项: - 创建:任何/过去6小时/ 12小时/ 24小时/周 - 状态:any / status_1 / status_2 / status_3 - 持续时间:任何/ duration_1 / duration_2 / duration_3 等

这些选项用于选择应向用户显示哪些值,并可以组合使用,例如:created = any,status = status_1,duration = duration_1

我的问题是,如何在Django中实现这一目标?

到目前为止我所拥有的: 我可以为列表对象创建一个通用视图的子类,创建一个视图,该视图接受参数(创建,状态,持续时间等)并提供正确的查询集(使用与其他参数一起传递的所选[或默认]排序选项)。 / p>

要传递这些参数,查询字符串似乎是正确的,因为我们从资源(所有页面的列表)中进行选择。是/否?

我也知道我们从request.GET.get('argument_name')获取此信息。

但是如何为搜索选项创建链接?例如:any,any / status_1 / status_2 / status_3。我们需要知道哪些已经有效,所以......模板标签?或许更简单的方法?

这是在Django中处理此类事物的正确解决方案,还是有更好的方法?

1 个答案:

答案 0 :(得分:1)

由于您有查询的离散,可选和无序知识,我认为GET是最好的方法。另请注意,request.GET是一个字典(ergo,你可以做request.GET ['status'])。

对于搜索选项,我会说模板标记和上下文变量可能是合适的,具体取决于视图的详细信息。我最可能的方法是使用需要显示的True / False标志填充上下文字典,然后使用{%if%}阻止在模板中对其进行排序。