首页 > 解决方案 > Django url正则表达式不匹配

问题描述

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

本地主机:8000/curvas?parcela=298

或者

本地主机:8000/curvas?parcela=7&fk_fecha=234

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

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

它可以工作,但过于宽松,例如 url 也匹配正则表达式:

本地主机:8000/curvas?random=298

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

标签: regexpython-3.xdjango-rest-framework

解决方案


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

路径是这样的:

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

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

class CurvasFilter(ListView):
    model = Curvas

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

推荐阅读