【问题标题】:Django regex - optional grouped parametersDjango 正则表达式 - 可选的分组参数
【发布时间】:2015-05-08 03:29:50
【问题描述】:

我正在为网站构建 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

这个场景有正则表达式吗?

提前谢谢大家。

附言 理想情况下,我还想知道如何才能扭转它们。

【问题讨论】:

  • 试试url(r'^myapp/mytasks/sort_by', myview.tasks),
  • @AvinashRaj 这不适用于默认场景:www.mydomain.com/myapp/mytasks
  • 对于排序等选项,我更倾向于使用www.mydomain.com/myapp/mytasks?sort_by=price_highest之类的查询字符串,甚至www.mydomain.com/myapp/mytasks&sort_by=price&reversed=false。然后,您必须在视图中处理查询字符串。
  • @Konos5 试试url(r'^myapp/mytasks(?!/price_lowest)', myview.tasks)
  • @AvinashRaj 谢谢,但我认为你在这里错过了重点。除了price_lowest,我并不是什么都需要。我需要price_lowestprice_highest 或任何其他我想到的参数,但只有在/sort_by/ 存在之后。如果sort_by 不存在,则丢弃所有并恢复为默认值。

标签: python regex django django-urls


【解决方案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 %} 标签。

【讨论】:

  • 谢谢。我知道多个 url 记录。但是,我需要仅使用正则表达式在单个 url 记录中执行此操作,这样我就可以在模板中轻松地反转它。
  • 两个网址倒转有什么问题?查看更新的答案。
  • 正如您所说...没有问题,您的解决方案似乎运行良好。然而,这是个人喜好的问题。我真的很想看到这个棘手的正则表达式来解决我的问题。
  • 正则表达式并不那么棘手,但我从未在url 中使用过类似的东西,并且不确定这个正则表达式的反向是否会起作用。如果你愿意,你可以测试它。查看更新的答案。
猜你喜欢
  • 2011-07-20
  • 2019-01-15
  • 2016-04-07
  • 1970-01-01
  • 2010-11-04
  • 2013-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多