2016-09-30 37 views
0

我不擅長正則表達式。我需要重定向一個url,看起來像這樣:Django使用「%20」捕獲url並重定向

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

如何使用url模式捕獲它?

我嘗試這樣做:

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

但它不工作,我得到一個404我怎樣才能解決這個問題?

回答

2

正如在docs中所述,Django在匹配url時沒有考慮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] 
    ... 

但是,你可以使用這樣的模式(它大寫字母,數字和字符%匹配)

爲什麼你的格局沒有工作

您最初使用沒有工作的模式,因爲匹配它必須連接的網址d在pdf39pd39。這是因爲正則表達式中的問號具有特殊含義並使前面的字符可選。還要注意點號字符表示任何字符。要使這些字符不具有其特殊含義,您可以使用\?\.