【问题标题】:Ignore `/static` when URL pattern absorbs it当 URL 模式吸收它时忽略`/static`
【发布时间】:2013-11-27 22:18:43
【问题描述】:

我在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/然后apacheOptions -Indexes提供,所以人们不会去探索。

站点设置为指向根目录,基本上是www/

【问题讨论】:

  • 把你的“static/”规则放在其他规则下面
  • @Joucks 我没有“静态/”模式。既然它们是由 apache 而不是 django 服务的,那会是什么?
  • 好的,抱歉,我现在明白了。因此,也许将您的网络服务器配置为不将 django 用于 example.com/static/ 网址。

标签: python django apache url url-routing


【解决方案1】:

如果对静态文件的请求在生产环境中返回 404,那么您的 Apache 配置不正确:您的 HTTP 服务器应该处理对 /static/ 的请求,而根本不涉及您的 Django 应用程序。有一个示例 Apache 配置 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“实际上我不想处理这个请求,把它传递”。

【讨论】:

  • 我正在转向生产,所以DEBUG = False。当我已经有解决方案时,static() 似乎是用于提供静态服务。该示例基本上是我的设置,除了我不必在某处别名 /static,因为它已经在 www/static/。如何将 Apache 配置为不将 Django 用于 /static/,以便它永远不会进入 django?
  • 啊,那是你的问题,那么 :) 你需要显式别名,否则 Apache 会将所有请求传递给 Django(因为 WSGIScriptAlias /)。
  • 刚刚添加了别名:Alias /static /var/www/static/,它似乎工作得很好!更新你的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-04-30
  • 1970-01-01
  • 2018-09-13
  • 1970-01-01
  • 1970-01-01
  • 2016-04-21
  • 1970-01-01
相关资源
最近更新 更多