Django正则表达式 - 可选的分组参数

时间:2015-03-06 13:53:39

标签: python regex django django-urls

我正在为网站构建urlconf但我面临一些问题;

在某些时候,我必须提供一个最终可以重新排序的任务列表。问题是我不知道如何配置正则表达式。

到目前为止,我已经得到了这个:

url(r'^myapp/mytasks, myview.tasks),

默认行为是接受www.mydomain.com/myapp/mytasks的请求。

但是,如果用户按下订单按钮,我需要Django也接受类型的请求:

www.mydomain.com/myapp/mytasks/sort_by/price_highest www.mydomain.com/myapp/mytasks/sort_by/price_lowest

但不是

www.mydomain.com/myapp/mytasks/price_lowest

这种情况是否有正则表达式?

提前谢谢大家。

P.S 理想情况下,我也想知道如何扭转它们。

1 个答案:

答案 0 :(得分:1)

为同一视图创建两个url条记录:

url(r'^myapp/mytasks/$', myview.tasks, name='tasks'),
url(r'^myapp/mytasks/sort_by/(price_highest|price_lowest)/$', myview.tasks,
                                                   name='sorted_tasks'),

然后将tasks()视图的签名更改为:

def tasks(request, sort_by=None):
    ...

在模板中,您可以轻松指向两个版本:

{% url 'tasks' %}
{% url 'sorted_tasks' 'price_highest' %}

更新:如果您确实想要制作唯一的url条记录,那么正则表达式将是:

'^myapp/mytasks/(?:sort_by/(price_highest|price_lowest)/)?$'

但我不确定它是否适用于{% url %}代码。