在Django视图中找不到静态文件

时间:2013-11-28 14:49:51

标签: django static views django-settings

我在Django 1.5.4上的开发服务器中遇到静态文件的问题。我不确定在实际的生产服务器(运行Apache)上是否存在相同的问题,因为我找到了一个解决方案,目前正在运行(只需对完整的URL进行硬编码 - 我知道这很糟糕,但它得到了工作完成)。

我正在使用Reportlab为我的项目创建一个PDF文件,我需要在其中包含一张图片。我在另一个post中跟进了答案:

from django.templatetags.static import static
url = static('x.jpg')

不幸的是,我从服务器得到的答案是IO错误:'无法打开资源“localhost:8000 / static / images / x.jpg”',即使将其复制并粘贴到URL栏中也能清楚地显示我认为照片就在那里。

我对静态文件的设置如下,它们适用于其他所有内容(CSS,Javascript等):

ROOT_PROJECT = os.path.join(os.path.split(__file__)[0], "..")
STATIC_ROOT = os.path.join(ROOT_PROJECT, 'static')
STATICFILES_DIRS = ()
STATICFILES_FINDERS = (
    'django.contrib.staticfiles.finders.FileSystemFinder',
    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
)

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

确保django.contrib.staticfiles中包含INSTALLED_APPS

通常有两种方法可以存储静态文件。

  1. 一种方法是在app文件夹中创建一个静态文件夹并将文件存储在那里。您可以查看here
  2. 是创建一个文件夹并存储不适用于任何特定应用程序的静态文件。
  3. 来自django documentation

      

    您的项目可能还会包含与特定应用无关的静态资产。除了在应用程序中使用静态/目录外,您还可以在 settings 文件中定义目录列表(STATICFILES_DIRS),Django也会在其中查找静态文件。

    例如:

    STATICFILES_DIRS = (
        os.path.join(BASE_DIR, "static"),
        '/var/www/static/',
    )
    

    如果您正在投入生产,请查看production deployment了解更多详情!