2013-07-23 218 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文章在你超越你的'再在这里做什么。)