2013-07-23 215 views
0

我的URL正則表達式是r'^admin.*/static/admin/(?P<path>.*)$',現在它可以匹配admin/static/admin/css/base.cssadmin/123/static/admin/js/actions.js,但我想它匹配的網址像admin/blog/post/static/static/admin/js/actions.js(現在它不匹配)正則表達式

我怎麼能這樣做呢?

感謝大家的意見。

我的問題是我設置靜態URL路徑在Django存儲我的CSS/JS文件,這樣url(r'^static/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.STATIC_ROOT,}), settings.STATIC_ROOT是os.path.join(os.path.dirname(os.path.abspath(__file__)), 'static')

但是,當我訪問管理界面,所有的CSS/JS文件丟失。因爲在django\contrib\admin\static\admin管理CSS文件存儲和在HTML文件的URL是「靜態/管理/ CSS/base.css」。在我設置的靜態路徑中沒有這個文件。

我的解決方案是設置另一個url,如r'^admin.*/static/admin/(?P<path>.*)$',並將文檔根設置爲django admin靜態文件路徑。但正如我所提到的,當我去管理主頁,一切都很好,當我深深地喜歡「添加用戶」頁面時,css文件仍然缺失。

我還發現一個解決方案是改變我的URL常規r'.*/static/admin/(?P<path>.*)$',這對一切都很好,但有沒有更好的解決方案?

我運行collectstatic後,在我的靜態路徑中,我可以找到admin文件夾及其css/js文件。然後我把我的URL路徑URL(R '^管理員/靜態/(P *)$?', 'django.views.static.serve',{'document_root':settings.STATIC_ROOT}),它適用於主管理頁面,但是當我訪問http://localhost/admin/sites/site/static/static/admin/js/admin/RelatedObje‌​ctLookups.js它仍然不起作用,我怎麼能寫我的url路徑?

+2

什麼是你正在試圖解決這個問題? –

+1

爲什麼要這樣做,你是字符串將靜態文件放入您的網頁模板? –

+0

我不知道爲什麼這不匹配,我只是逃過了斜槓,刪除了捕獲組的名稱,它對我有用http://www.rubular.com/r/DlxE1mejvL –

回答

0

的模式匹配得很好:

>>> import re 
>>> p = re.compile(r'^admin.*/static/admin/(?P<path>.*)$') 
>>> p.match("admin/blog/post/static/static/admin/js/actions.js").groups() 
('js/actions.js',) 

所以並不清楚爲什麼沒有爲你工作。你有沒有仔細檢查有問題的網址是否與其他一些早期的正則表達式不匹配?

編輯:基於上述更新,可能STATIC_URL沒有正確設置(一個空字符串,也許?)。它應該指向從(URL,不是目錄)提供靜態文件的位置,並且必須以斜槓結尾。請參閱Settings: STATIC_URL。 (作爲一個腳註,你應該有點小心,因爲你的URL正則表達式太多了;你還沒有使用這個,但是維基百科的ReDoS文章在你超越你的'再在這裏做什麼。)