我的媒体或静态内容均未显示,每次加载页面时,我都会看到404错误。
来自我的nginx / sites-enabled的片段(下面这些位置理想情况下我想要我的静态和媒体内容)
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",
答案 0 :(得分:1)
您的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
目录中的symbolic link具有相同的相对名称。
由于您无法使用与文件链接完全相同的完整路径+名称创建符号链接,因此您的STATIC_ROOT
需要与STATICFILES_DIRS
不同。如果所有静态文件都驻留在特定于应用程序的静态文件夹中,则可以省略STATICFILES_DIRS
。但是,STATIC_ROOT
设置是必需的,因为Django 需要所有符号链接的文件夹才能收集文件。
这些符号链接是一种允许第三方应用程序(不在项目根目录中)仍然提供静态文件的方法。即使您的静态文件可以遍布整个地方,例如在使用python包的文件夹中,您只需要为静态文件的一个特定位置配置nginx。这极大地简化了您的服务器配置。
这些符号链接也是始终在您对静态文件进行更改后需要运行collectstatic
的原因。否则,nginx将找不到指示实际文件所在位置的链接,并且无法提供该文件。
答案 1 :(得分:0)
更改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
设置更改为指向有效网址:
MEDIA_URL = "/media/"
STATIC_URL = "/static/"