【问题标题】:Django url regex not matchingDjango url正则表达式不匹配
【发布时间】:2019-12-10 15:25:52
【问题描述】:

我正在尝试为这些示例实现正则表达式 url:

localhost:8000/curvas?parcela=298

localhost:8000/curvas?parcela=7&fk_fecha=234

我尝试使用以下正则表达式路径从 django rest 框架 (documentation) 实现类似的 url 正则表达式:

re_path(r'curvas(?P<parcela>.+)', views.CurvasFilter.as_view()),

它可以工作,但它太宽松了,例如那个 url 也匹配正则表达式:

localhost:8000/curvas?random=298

如何更改正则表达式以仅匹配所需的 url 参数?

【问题讨论】:

  • parcelaquerystring 的一部分,而不是 path,因此您无法使用 url(..)re_path(..)path(..).

标签: regex python-3.x django-rest-framework


【解决方案1】:

问号 (?) 后面的部分是 querystring [wiki]。它不是路径的一部分,因此您无法使用path(..)re_path(..) 捕获它。无论如何,这也可能不是一个好主意,因为参数的顺序通常是随机的,因此匹配?foo=4&amp;bar=2 的正则表达式可能难以匹配?bar=2&amp;foo=4

路径是这样的:

re_path(r'^curvas/$', views.CurvasFilter.as_view())

您可以使用self.request.GET['parcela'] 访问parcela 的值。例如:

class CurvasFilter(ListView):
    model = Curvas

    def get_queryset(self):
        return super().get_queryset().filter(
            parcela=self.request.GET['parcela']
        )

【讨论】:

  • 谢谢,所以我将使用以下正则表达式: r'^curvas?$' 这似乎更具限制性,不是吗? (它还要求网址有问号)
  • @David1212k:不,问号也不是路径的一部分,它应该是^curvas/$(或^curvas$,所以没有问号)。请注意,这里的问号顺便解释为正则表达式量词(“零或一”)。
猜你喜欢
  • 2011-08-17
  • 2017-09-12
  • 2014-01-31
  • 1970-01-01
  • 1970-01-01
  • 2016-12-12
  • 2018-04-16
  • 1970-01-01
相关资源
最近更新 更多