【问题标题】:Regular expressions in django urldjango url中的正则表达式
【发布时间】:2013-07-22 15:36:07
【问题描述】:

我的 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(现在它不匹配)

我该怎么做?

感谢大家的cmets。

我的问题是我在 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 文件都丢失了。因为管理员 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 路径?

【问题讨论】:

  • 您要解决的问题是什么?
  • 为什么要这样,你是把静态文件放到你的网页模板里吗?
  • 我不知道为什么不匹配,我只是转义了斜杠,删除了捕获组的名称,它在rubular.com/r/DlxE1mejvL上对我有用
  • 管理资源不应移动。您的配置中的 STATIC_URL 是什么?你跑manage.py collectstatic了吗?
  • 等等,问题解决了吗?

标签: python regex django django-urls


【解决方案1】:

模式匹配得很好:

>>> 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 正则表达式做太多事情;你还没有使用这个,但是在你超越你之前阅读维基百科的 ReDoS 文章是很好的'在这里做。)

【讨论】:

    猜你喜欢
    • 2011-03-22
    • 2013-07-26
    • 2014-07-08
    • 1970-01-01
    • 2015-02-01
    • 2012-12-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多