9

我有一个关于新的 Django 1.3 静态文件框架的一般性问题。

我真的很喜欢 Django 1.3 中引入的新的 Django 静态文件功能。通常,我设置 STATIC_URL="/static/" 并将 {{ STATIC_URL }} 模板标签输入到我的模板中。开发服务器如何自动提供静态文件并且我的所有内容都按预期提供,这很棒。

The {{ STATIC_URL }} would be substituted in the template and might serve up files like this...
example.com/static/css/master.css
example.com/static/images/logo.png
example.com/static/js/site.js

但是,我正在使用静态媒体安装在 url 根目录的旧站点。例如,静态 url 的路径可能如下所示:

example.com/css/master.css
example.com/images/logo.png
example.com/js/site.js 

它不使用“静态”url 命名空间。

我想知道是否有办法让新的静态文件功能不使用静态命名空间并提供上面的 url,但仍然保留新的静态文件框架的好处(收集静态文件、开发服务器提供的静态文件等)。我尝试设置 STATIC_URL="" 和 STATIC_URL="/",但似乎都没有达到预期的效果。

有没有办法配置静态文件以在没有命名空间的情况下提供静态文件?感谢您的考虑。

4

3 回答 3

5

static您可以手动添加项目目录中不存在的额外位置:

网址.py

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

urlpatterns = patterns('',
    # ... the rest of your URLconf goes here ...
)

if settings.DEBUG:
    urlpatterns += static('/css/', document_root='app_root/path/to/css/')
    urlpatterns += static('/images/', document_root='app_root/path/to/images/')
    urlpatterns += static('/js/', document_root='app_root/path/to/js/')

这将为 DEBUG 开发服务器映射媒体。当您运行生产模式服务器时,您显然会从 Web 服务器处理这些静态位置,而不是将请求发送到 django。

于 2012-06-27T18:53:17.513 回答
2

为什么不保留静态文件功能并简单地在 Web 服务器级别使用重写来提供内容。

例如:

rewrite /css /static permanent; (for nginx) 

这将使您的项目目录更加整洁,并且使您将来可以更轻松地移动静态目录,例如将您的 STATIC_URL 移动到 CDN。

于 2012-06-27T21:33:40.053 回答
1

这是您设置urls.py以在 Django 1.10 上同时提供 index.html 和其他静态文件的方式(同时仍然能够提供其他 Django 视图):

from django.contrib.staticfiles.views import serve
from django.views.generic import RedirectView

urlpatterns = [

    # / routes to index.html
    url(r'^$', serve,
        kwargs={'path': 'index.html'}),

    # static files (*.css, *.js, *.jpg etc.) served on /
    url(r'^(?!/static/.*)(?P<path>.*\..*)$',
        RedirectView.as_view(url='/static/%(path)s')),
]

请参阅此答案,我在其中对此类配置进行了更完整的解释——尤其是如果您想将其用于生产。

于 2016-11-10T10:39:01.750 回答