django url中的正则表达式

时间:2013-07-23 13:58:27

标签: python regex django django-urls

我的网址正则表达式为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匹配网址(现在它与)

我怎么能这样做?

感谢大家的评论。

我的问题是我在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文件都丢失了。因为{c}文件存储在django\contrib\admin\static\admin中,而其html文件中的url是'static / admin / css / base.css'。我在设置中设置的静态路径中没有此文件。

我的解决方案设置了另一个网址,如r'^admin.*/static/admin/(?P<path>.*)$',并将文档根目录设置为django admin静态文件路径。但就像我提到的那样,当我进入管理主页面时,一切都还可以,当我像“添加用户”页面一样深入时,css文件仍然缺失。

我还发现一个解决方案是将我的网址定期更改为r'.*/static/admin/(?P<path>.*)$',这对所有内容都很好,但有没有更好的解决方案?

运行collectstatic后,在我的静态路径中,我可以找到admin文件夹及其css / js文件。然后我将我的url路径设置为url(r'^ admin / static /(?P。*)$','django.views.static.serve',{'document_root':settings.STATIC_ROOT}),,,适用于主管理页面,但是当我访问http://localhost/admin/sites/site/static/static/admin/js/admin/RelatedObje‌​ctLookups.js它仍然无效时,我怎么能写我的网址路径?

1 个答案:

答案 0 :(得分: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,而不是目录),并且必须以斜杠结尾。请参阅Settings: STATIC_URL

(作为一个脚注,你应该对你的URL regexp做得太多小心一点;你还没有这个,但是在你超越之前,维基百科的ReDoS文章是好的阅读你在这做什么。)