文件服务django网址中的排除错误

时间:2013-01-24 11:55:11

标签: python regex django django-urls

我的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}),
)

问题在于,使用此配置,我在runserver的控制台上看到了诸如

之类的内容
  

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

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

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

提前感谢您帮我组合静态文件,子域无模板查看和管理员正常访问。

2 个答案:

答案 0 :(得分:3)

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

如果你试图不匹配“(admin)”,那么你可以使用这样的负向前瞻:

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

或者,更有可能的是,您尝试不匹配“admin”:

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

答案 1 :(得分:0)

您似乎需要在设置和网址中添加ADMIN_STATIC_PREFIX