2

这与我的 settings.pystatic有关settings.py

STATIC_ROOT = '/home/coat/www/site/app/static/'
STATIC_URL = '/static/'
STATICFILES_DIRS = (
"/usr/lib/python2.6/site-packages/django/contrib/admin/static/",
# This is Django admin default static files
)

我使用 django 服务器:

./manager runserver

然后我打开网址:http://localhost:8000/static/admin/css/base.css

它工作得很好。

但是一个开放http://localhost/static/admin/css/base.css

它打印'404'

在此处输入图像描述

我已经多次重启 Nginx 和 uwsgi,但它不起作用。

4

2 回答 2

6

首先,这是nonono

STATIC_ROOT = '/home/coat/www/site/app/static/'

永远不要硬编码绝对路径,你只是让你的设置文件不那么便携,可能会杀死小猫。根据您的需要进行调整:

import os.path
import posixpath

PROJECT_ROOT = os.path.abspath(os.path.join(os.path.dirname(__file__), '..')

STATIC_ROOT = os.path.join(PROJECT_ROOT, 'static')

# fix STATICFILES_DIRS too

现在,回答你的问题。django.contrib.staticfiles 很棒,但起初可能有点混乱。

  1. 必须了解collectstatic 命令

    将静态文件收集到 STATIC_ROOT。[...] 使用启用的查找器搜索文件。默认是查看 STATICFILES_DIRS 中定义的所有位置以及 INSTALLED_APPS 设置指定的应用程序的“静态”目录。

  2. 使用 runserver,静态文件会自动提供,但在生产模式下(DEBUG=False,像 Nginx 这样的真实 HTTP 服务器),您应该运行 collectstatic 来(重新)构建 STATIC_ROOT

  3. STATIC_ROOT:是 HTTP 服务器应该.

  4. STATIC_URL:是 HTTP 服务器应该将静态文件提供给的根 URL 。

  5. STATICFILES_DIRS:其他静态目录,除了每个应用程序的“静态”子目录。因为 django.contrib.admin 是一个带有“静态”文件夹的普通应用程序,所以不需要在设置中指定它。

结论:如果 STATIC_ROOT 解析为/home/coat/www/site/app/static/,并且 STATIC_URL 是/static/,那么您应该:

  1. 运行 collectstatic 管理命令

  2. 配置 Nginx 服务/home/coat/www/site/app/static//static/,即:

    location ^~ /static/ {
        alias /home/coat/www/site/app/static/;
    }
    
  3. 重新加载 nginx

于 2012-07-18T10:50:53.733 回答
0

在开发过程中,runserver 命令可以为您的静态文件提供服务。在生产中,您需要配置 NGinx 来执行此操作。我推荐你阅读的 Django 文档中有两章:

  1. 在生产中提供静态文件
  2. 服务文件(部署)

特别是最后一个链接解释了如何配置 NGinx 以提供静态文件。

于 2012-07-18T10:45:31.900 回答