我的媒体或静态内容都没有出现,每次加载页面时,我都会看到404个错误。
支持nginx/站点的代码片段(下面这些位置是我希望静态和媒体内容在这里的理想位置)
location /media {
alias /home/django/django/proj/proj/media;
}
location /static {
alias /home/django/django/proj/proj/static;
}settings.py中与“静态”相关的所有内容的片段
MEDIA_ROOT = os.path.join(PACKAGE_ROOT, "media")
MEDIA_URL = "/media/"
STATIC_ROOT = os.path.join(PACKAGE_ROOT, "static")
STATIC_URL = "/static/"
# Additional locations of static files
STATICFILES_DIRS = [
os.path.join(PACKAGE_ROOT, "static"),
]
# List of finder classes that know how to find static files in
# various locations.
STATICFILES_FINDERS = [
"django.contrib.staticfiles.finders.FileSystemFinder",
"django.contrib.staticfiles.finders.AppDirectoriesFinder",发布于 2015-02-02 02:14:24
您的nginx别名必须与您的STATIC_ROOT和MEDIA_ROOT设置相匹配,否则nginx将不知道在哪里找到这些文件。
location /media {
alias /home/django/django/proj/proj/site_media/media;
}
location /static {
alias /home/django/django/proj/proj/site_media/static;
}如果这不起作用,请检查nginx试图在错误日志中找到文件的位置。
提供媒体文件非常简单:您只需要告诉nginx向MEDIA_URL + '<filename>'发出的请求应该提供一个名为MEDIA_ROOT + '<filename>'的文件。这些是nginx中的location和alias设置。
静态文件要复杂一些。Django处理静态文件的方式是,manage.py collectstatic使用STATICFILES_FINDERS查找所有静态文件。这包括STATICFILES_DIRS目录中的所有文件。符号链接是在您的STATIC_ROOT目录中使用相同的相对名称生成的。
由于无法创建与文件链接完全相同的符号链接,所以您的path+name需要与您的STATICFILES_DIRS不同。如果所有静态文件都驻留在应用程序特定的静态文件夹中,则可以省略STATICFILES_DIRS。但是,STATIC_ROOT设置是必需的,因为Django需要一个文件夹来收集所有符号链接,以便收集文件。
这些符号链接是允许第三方应用程序(不在项目根目录中)仍然提供静态文件的一种方式。即使您的静态文件可以到处都是,例如在包含python包的文件夹中,但是您只需要为一个特定位置的静态文件配置nginx。这大大简化了服务器配置。
这些符号链接也是为什么在对静态文件进行更改之后总是需要运行collectstatic的原因。否则,nginx将找不到一个链接来指示实际文件的位置,并且无法提供该文件。
发布于 2015-02-02 01:55:52
更改nginx配置中的路径(注意site_media部分)?
location /media {
alias /home/django/django/proj/proj/site_media/media;
}
location /static {
alias /home/django/django/proj/proj/site_media/static;
}并将MEDIA_URL设置更改为指向有效的url:
MEDIA_URL = "/media/"
STATIC_URL = "/static/"https://stackoverflow.com/questions/28270081
复制相似问题