Django无法识别我的开发机器上的静态文件

时间:2013-11-28 17:18:08

标签: python django nginx gunicorn django-1.3

我的任务是修复django 1.3站点的某些方面,该站点在服务器上的Apache / PostgreSql上运行。我正在尝试在我的开发机器上设置它,使用带有postgres的虚拟环境和内部python开发服务器。

我设法让网站运行并从我的本地pg实例中读取,但我无法识别我的静态文件,这些文件存储在/site_media中。该网站很快将被重写为使用django 1.6和正确的/static文件夹,但现在我需要修复此网站。

我也试过用nginx和gnunicorn运行它,但结果是一样的,网站显示但没有样式,所有对静态目录中文件的引用给出了404.对404的进一步检查显示django正在尝试用路由器解析资源。

以下是相关设置:

settings.py:

# Absolute path to the directory that holds media.
# Example: "/home/media/media.lawrence.com/"
MEDIA_ROOT = '/home/nico/src/df2/datos/site_media/'

# URL that handles the media served from MEDIA_ROOT. Make sure to use a
# trailing slash if there is a path component (optional in other cases).
# Examples: "http://media.lawrence.com", "http://example.com/media/"
MEDIA_URL = 'http://localhost:8000/site_media/'

我还添加了以下配置,但无济于事:

INSTALLED_APPS = (
    'django.contrib.staticfiles',
)

STATICFILES_DIRS = (
    '/home/nico/src/df2/datos/site_media/',
)

STATIC_URL = 'http://localhost:8000/site_media'

nginx配置文件:

server {
    server_name localhost;

    access_log off;

    location /site_media/ {
        alias /home/nico/src/df2/datos/site_media;
    }

    location / {
            proxy_pass http://127.0.0.1:8001;
            proxy_set_header X-Forwarded-Host $server_name;
            proxy_set_header X-Real-IP $remote_addr;
            add_header P3P 'CP="ALL DSP COR PSAa PSDa OUR NOR ONL UNI COM NAV"';
    }
}

如果您需要任何其他配置,请告诉我。

我更喜欢纯粹从python服务器上运行,但是使用gunicorn / nginx的解决方案也很好

1 个答案:

答案 0 :(得分:0)

修复是在urlpatterns变量中添加一个静态处理程序:

from django.conf import settings

if settings.DEBUG:
    # static files (images, css, javascript, etc.)
    urlpatterns += patterns('',
        (r'^site_media/(?P<path>.*)$', 'django.views.static.serve', {
        'document_root': settings.MEDIA_ROOT}))