【问题标题】:my django project static files can not be load with option debug=false无法使用选项 debug=false 加载我的 django 项目静态文件
【发布时间】:2013-02-15 11:20:24
【问题描述】:

很奇怪,我的 django 网站(使用 django 1.3 在 linux 服务器上设置)可以使用 DEBUG = True 正确访问。但是当我将选项更改为 DEBUG = False 时,将无法加载静态内容(找不到 css 文件和图像)

这是我在setting.py中得到的相关选项:

DEBUG = False
STATIC_ROOT = ''
ADMIN_MEDIA_PREFIX = '/static/admin/'
STATICFILES_DIRS = ("/home/ubuntu/ls_website/static/",)
STATICFILES_FINDERS = (
    'django.contrib.staticfiles.finders.FileSystemFinder',
    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
)

有人知道吗?如果版本太低,我会等1.5发布。

【问题讨论】:

  • 这是因为你的路径是硬编码的,所以如果你通过窗口查看它是不同的路径。我的建议是让所有人都可以使用你的路径,不要硬编码
  • 我发现我的问题与平台无关,而是选项 DEBUG。

标签: linux django debugging static option


【解决方案1】:

我发现当 debug=False 时,django 不会自动加载静态文件。选项在 urls.py 中设置静态路径或使用 apache 提供静态文件。 人们说在 urls.py 中设置静态路径比使用 apache 提供静态文件要慢。不知道为什么...

【讨论】:

  • 因为 django 说它不是一个专业的 web 引擎(仅供开发)。静态文件更好地服务于生产环境中的专业网络引擎。
【解决方案2】:

当 DEBUG=False 时,Staticfiles 不执行任何操作。您需要使用 apache 提供这些文件。 Staticfiles 能够将文件收集到一个位置以便您轻松完成,然后您使用一些 apache 魔法(假设这里因为您没有指定)让 apache 拦截这些请求并为您提供静态文件。

    Alias /robots.txt  /home/username/Python/project/site_media/static/robots.txt
    Alias /favicon.ico /home/username/Python/project/site_media/static/favicon.ico
    Alias /static/     /home/username/Python/project/site_media/static/

我不记得是 buildstatic、build_static、collectstatic 还是 collect_static 将这些文件从您的开发站点复制到您的部署点,但是这些变量控制着 staticfiles 如何发挥它的魔力

# Absolute path to the directory that holds static files like app media.
# Example: "/home/media/media.lawrence.com/apps/"
STATIC_ROOT = os.path.join(PROJECT_ROOT, "site_media", "static")

# URL that handles the static files like app media.
# Example: "http://media.lawrence.com"
STATIC_URL = "/static/"

# Additional directories which hold static files
STATICFILES_DIRS = [
    os.path.join(PROJECT_ROOT, "static"),
    os.path.join(PROJECT_ROOT, "media"),
]

这假设您的静态文件位于项目的 static 文件夹中,并且您希望从 site_media 文件夹中提供它们。

【讨论】:

    【解决方案3】:

    我也在 Windows 和 Linux 之间移动以进行开发。为了解决settings.py中绝对路径的问题,我使用了这个函数:

    def map_path(directory_name):
        return os.path.join(os.path.dirname(__file__),
            '../' + directory_name).replace('\\', '/')
    

    你可以用这种方式实现:

    STATICFILES_DIRS = (
        map_path('static'),
    )
    

    这个函数是为 Django 1.4.x 定制的。您需要为 Django 1.3.x 稍微修改它。希望对您有所帮助。

    【讨论】:

    • 也许你误解了我的问题。我不会将我的服务器从 Linux 移动到 Windows。我的服务器在 Linux 上,没有改变。所以我认为我不需要使用 os.path.dirname(file)。从 Linux 到 windows 的变化是网络浏览器。
    • 没问题。如果您指的是 staticfiles 应用程序在开发中提供静态文件的能力,那完全基于 DEBUG 设置。如果 DEBUG = True,静态文件将自动提供这些文件,否则您将需要 Apache 等来提供这些文件。
    猜你喜欢
    • 2017-02-01
    • 1970-01-01
    • 2016-01-13
    • 2022-01-12
    • 1970-01-01
    • 2019-09-03
    • 2012-09-28
    • 2020-04-16
    • 2012-11-27
    相关资源
    最近更新 更多