0

我的 URL 正则表达式是r'^admin.*/static/admin/(?P<path>.*)$',现在它可以匹配admin/static/admin/css/base.cssor admin/123/static/admin/js/actions.js,但我希望它匹配 url admin/blog/post/static/static/admin/js/actions.js(现在它不匹配)

我怎么能这样做?

感谢大家的评论。

我的问题是我在 django 中设置了静态 url 路径来存储我的 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 文件都丢失了。因为 admin css 文件存储在其中,django\contrib\admin\static\admin并且它在 html 文件中的 url 是“static/admin/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'^admin/static/(?P.*)$','django.views.static.serve',{'document_root'‌​:settings.STATIC_ROOT}), ,it适用于主管理页面,但是当我访问http://localhost/admin/sites/site/static/static/admin/js/admin/RelatedObje‌​ctLookups.js它时仍然无法正常工作,我该如何编写我的 url 路径?

4

1 回答 1

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',)

所以不清楚为什么它不适合你。您是否仔细检查过有问题的 URL 是否与其他早期的正则表达式不匹配?

编辑:根据上面的更新,可能STATIC_URL没有正确设置(可能是空字符串?)。它应该指向提供静态文件的位置(URL,而不是目录),并且必须以斜杠结尾。请参阅设置: STATIC_URL

(作为一个脚注,你应该小心地让你的 URL 正则表达式做太多事情;你还没有使用这个,但是在你超越你正在做的事情之前,你应该阅读Wikipedia 的ReDoS文章。 )

于 2013-07-23T18:15:54.510 回答