我在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/
。
答案 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“实际上我不想处理这个请求,传递它”