【问题标题】:File serving exclusion error in django urlsdjango url 中的文件服务排除错误
【发布时间】:2013-01-08 04:14:53
【问题描述】:

我在 Django 中的 urls.py 文件有问题,它允许我在任何地方访问我的管理界面,在任何地方加载图像。如果有人可以看一下,在此先感谢!

from django.conf.urls import patterns, include, url
from django.contrib import admin
from django.conf import settings

urlpatterns = patterns('',
    (r'^admin/doc/', include('django.contrib.admindocs.urls')),
    (r'^admin/', include(admin.site.urls)),

    url(r'^admin/files/(?P<filepath>.*)$', 'my.app.admin.serv_backup_files', name='admin-file-serv'),


    (r'^(?P<restaurant_slug>[^(admin)][a-zA-B-_0-9]+)$', TemplateView.as_view(template_name=os.path.join(settings.G_DOC_ROOT, 'index.html'))),
    (r'^(?P<path>[^(admin)].*)$', 'django.views.static.serve', {'document_root': settings.G_DOC_ROOT}),
)

问题是,在这个配置下,我在运行服务器的控制台上看到了类似的东西

“GET /img/field_bg.gif HTTP/1.1”404

对于所有应该静态提供的图像。

我可以从最后一个模式中删除 [^(admin)] 并且该站点将得到很好的服务,只是它会尝试将管理界面重新路由到静态文件。

在此先感谢您帮助我将静态文件、无子域 TemplateViewing 和管理员正常访问相结合。

【问题讨论】:

    标签: python regex django django-urls


    【解决方案1】:

    您似乎需要将ADMIN_STATIC_PREFIX 添加到您的设置和网址中。

    【讨论】:

    【解决方案2】:

    我不太了解 python 正则表达式,但在我使用过的任何其他风格中,[^(admin)] 将匹配一个 single 字符,该字符除了 '( 之外的任何字符>' OR 'a' OR 'd' OR 'm' OR 'i' OR 'n' 或 ')'。字符类 ([...]) 匹配单个字符,而不是短语。

    如果您尝试不匹配“(管理员)”,那么您可以像这样使用负前瞻:

    ^(?P<restaurant_slug>(?!\(admin\))[a-zA-B-_0-9]+)$
    

    或者,更有可能的是,您试图不匹配“管理员”:

    ^(?P<restaurant_slug>(?!admin)[a-zA-B-_0-9]+)$
    

    【讨论】:

    • 现在开始变得有趣了:第一个,带有 实际上没有问题,但是第二个,带有 和直接服务,是的!最后,您的建议使静态服务正则表达式工作正常,我也在第一个表达式中使用了它,但无论出于何种原因,另一个版本也在那里工作。是的,我做了几个测试,清空缓存等等......
    猜你喜欢
    • 1970-01-01
    • 2013-12-09
    • 2014-03-23
    • 1970-01-01
    • 2015-11-06
    • 2013-03-03
    • 1970-01-01
    • 2021-05-06
    • 2012-10-23
    相关资源
    最近更新 更多