当URL模式吸收它时忽略`/ static`

时间:2013-11-14 18:33:52

标签: python django apache url url-routing

我在example.com/static/处提供静态文件。我也在我的根url conf(指向example.com)中使用以下url模式,它吸收所有内容以便在根目录中包含一些内容:

url(r'^', include('ecore.urls', namespace="ecore")),

ecore.urls:

urlpatterns = patterns('',
    url(r'^$', views.index, name='index'),
    url(r'^tags/(?P<tag_slug>[\w-]*)', views.tag_view, name='tag_view'),
    url(r'^about/', views.about_view, name='about'),
    url(r'^contact/', views.contact_view, name='contact'),
)

这是一个问题,因为我的所有静态文件都返回404

这在我的开发中不是问题,因为我使用的是example.com/dev/,因此该模式并没有咀嚼任何东西。

无法为url模式解析否定前瞻((?!static/))。有某种忽略模式吗?


使用collecstatic将文件放入www/static/然后apache Options -Indexes,以便人们不去探索,来提供静态文件。

网站设置为指向根目录www/

1 个答案:

答案 0 :(得分:1)

如果对静态文件的请求正在生产中返回404,那么您的Apache配置不正确:您的HTTP服务器应该处理/static/的请求而根本不涉及您的Django应用程序。 Apache config in the Django documentatio就是一个例子。

确保Alias /static之前的WSGIScriptAlias /位于您的配置中。

如果对静态文件的请求正在开发中返回404,那么您可以显式添加staticfiles处理程序:

from django.conf import settings
from django.conf.urls.static import static

urlpatterns = patterns(…)

if settings.DEBUG:
    urlpatterns = static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) + urlpatterns

(另见:https://docs.djangoproject.com/en/dev/howto/static-files/#serving-static-files-during-development

Django没有任何“忽略此URL模式”功能。毕竟,忽略URL模式意味着什么?当Django处理请求时,HTTP服务器期待响应,并且没有标准(甚至特定于Apache)的方式让Django告诉Apache“实际上我不想处理这个请求,传递它”