【问题标题】:Django URL regex between various exact string matches各种精确字符串匹配之间的 Django URL 正则表达式
【发布时间】:2020-03-20 18:36:30
【问题描述】:

Django (v2.2)

我正在尝试实现一个包含三个完全匹配的路由 allgswebservice,以便在页面上的表格中进行过滤。

path(r'^(?P<mode>all|gs|webservice)$', get_orders, name='dash.orders_mode'),
path('(?P<mode>/^all$|^gs$|^webservice)/$', get_orders, name='dash.orders_mode'),

这两种方法似乎都不起作用

因为路线上也有id。

编辑:

这是问题的解决方案(没有NoReverseMatch at /dash/orders/all):

re_path('(?P<mode>(all|gds|ws))', get_orders, name='dash.orders_mode'),

【问题讨论】:

  • 你使用path,而不是re_path

标签: python django regex


【解决方案1】:

为了使用正则表达式,你应该使用re_path(..) [Django-doc]path(..) [Django-doc]是一个使用路径转换器的函数

    <b>re_path(</b>r'^(?P&lt;mode&gt;all|gs|webservice)$', get_orders, name='dash.orders_mode'<b>)</b>,

话虽如此,在这里简单地创建三个路径可能会更好,并且可能使用kwargs=… 参数将额外的数据传递给视图。这样一来,您就可以更清楚地了解正在发生的事情。

【讨论】:

    【解决方案2】:

    我会避免将业务逻辑放入您的网址中。

    path('<mode>', get_orders, name='dash.orders_mode'),
    

    那么在你看来

    from django.http import Http404
    def get_orders(request, mode):
        if mode not in ['all', 'gs', 'webservice']:
            raise Http404
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-19
      • 2020-10-19
      • 2012-08-18
      相关资源
      最近更新 更多