2013-07-02 115 views
1

使用Django 1.5.1,我試圖匹配:Django的URL配置 - 匹配文件名

/uploads/view/FILE_NAME.ext eg: /uploads/view/testfile.png 

目前:

uploads_url_patterns = patterns('', 
    url(r'^uploads/view/(?P<file_name>\w{0,256})/$', ShowImageView.as_view(), name='show'), 
) 

但是它不匹配/uploads/view/testfile.png

因爲我仍然在努力理解蟒蛇正則表達式的我怎麼能匹配,所以我結束了包括文件名和其擴展名,甚至更好,它的單獨文件名和擴展名的字符串?

回答

8

\w.不匹配,所以.png擴展名未被匹配。將.點加入你的角色等級。要刪除結尾的斜線,以及:

uploads_url_patterns = patterns('', 
    url(r'^uploads/view/(?P<file_name>[\w.]{0,256})$', ShowImageView.as_view(), name='show'), 
) 

現在,這將匹配文字文本uploads/view/其次是0到256之間和字母,數字,下劃線和句點。

快速演示:

>>> import re 
>>> re.search(r'^uploads/view/(?P<file_name>[\w.]{0,256})$', 'uploads/view/test_filename.png') 
<_sre.SRE_Match object at 0x103aa5828> 
>>> re.search(r'^uploads/view/(?P<file_name>[\w.]{0,256})$', 'uploads/view/test_filename.png').groupdict() 
{'file_name': 'test_filename.png'} 
+0

點意味着 '任何字符'。可能最好使用[\ w \。] {0,256}? – sergzach

+1

@sergzach:不能在字符類沒有。在'[...]'內,它只是*一個點。 –

+0

@MartijnPieters謝謝,它的工作..你會建議分開搶文件名和擴展名,如FILE_NAME =>「test_filename」,延長=>「PNG」? – Daniel