Django使用"%20"捕获网址和重定向

时间:2016-09-30 00:02:19

标签: django django-urls

我不擅长正则表达式。我需要重定向一个看起来像这样的网址:

http://www.example.com/files/BIENES%20INMUEBLES%20DISPONIBLES.pdf?39

如何使用网址模式捕获它?

我试过了:

url(r'^files/BIENES%20INMUEBLES%20DISPONIBLES.pdf?39$', views.MyRedirectView.as_view()),

但是它没有用,我得到了404.我怎么能解决这个问题?

1 个答案:

答案 0 :(得分:2)

docs中所述,Django在匹配网址时不考虑GET查询参数。因此,匹配过程中将跳过?39部分。

但是,您可以使用这样的模式(它匹配大写字母,数字和字符%):

url(r'^files/(?P<name>[A-Z\d%]*)\.pdf$', view, name='whatever')

然后在视图中,您可以执行以下操作:

def view(request, name):
    query_keys = [key for key in request.GET]  # query_keys = [39]
    ...

为什么您的模式不起作用

您最初使用的模式无效,因为与之匹配的网址必须以pdf39pd39结尾。这是因为正则表达式中的问号具有特殊含义,并使前面的字符可选。另请注意,点字符表示任何字符。要使这些字符不具有其特殊含义,您可以使用\?\.