我不擅长正则表达式。我需要重定向一个看起来像这样的网址:
http://www.example.com/files/BIENES%20INMUEBLES%20DISPONIBLES.pdf?39
如何使用网址模式捕获它?
我试过了:
url(r'^files/BIENES%20INMUEBLES%20DISPONIBLES.pdf?39$', views.MyRedirectView.as_view()),
但是它没有用,我得到了404.我怎么能解决这个问题?
答案 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]
...
为什么您的模式不起作用
您最初使用的模式无效,因为与之匹配的网址必须以pdf39
或pd39
结尾。这是因为正则表达式中的问号具有特殊含义,并使前面的字符可选。另请注意,点字符表示任何字符。要使这些字符不具有其特殊含义,您可以使用\?
和\.
。