【发布时间】:2014-03-04 14:57:53
【问题描述】:
如果我想在模板中显示图像,我指定的路径是相对于我的应用程序目录中的静态文件夹的。但是如果我想从视图函数加载文件,那么我指定的路径似乎是相对于项目目录的。这些文件应该都在同一个目录中吗?或者以这种方式将它们分开是典型的吗?视图函数加载的文件(例如包含人类可读设置的文本文件)是否被视为“静态”,与用于呈现我的模板的图像、css 和 js 文件具有相同的意义?
【问题讨论】:
如果我想在模板中显示图像,我指定的路径是相对于我的应用程序目录中的静态文件夹的。但是如果我想从视图函数加载文件,那么我指定的路径似乎是相对于项目目录的。这些文件应该都在同一个目录中吗?或者以这种方式将它们分开是典型的吗?视图函数加载的文件(例如包含人类可读设置的文本文件)是否被视为“静态”,与用于呈现我的模板的图像、css 和 js 文件具有相同的意义?
【问题讨论】:
Django 支持两种不同的东西:静态文件和媒体文件。静态文件(CSS、JavaScript、图像)是您网站的一部分。用户上传的图片或视频等内容会上传到MEDIA_ROOT。您可以使用这两个设置来控制它:
MEDIA_ROOT = '/absolute/path/to/media'
MEDIA_URL = '/media/'
使用开发服务器,您可能需要将其添加到您的 URL,
urlpatterns = patterns('',
# ... the rest of your URLconf goes here ...
) + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
使用文件上传字段(FileField、ImageField),您可以使用包含定义的MEDIA_URL 的 url 属性获取文件 url。
【讨论】:
不,您不应该将真正的静态内容与包数据文件混为一谈。除此之外,您通常不希望用户能够直接读取这些数据文件。相反,将文件放在包目录中的其他位置,然后使用 pkgutil.get_data 读取它们。
【讨论】: