首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Django/nginx的静态内容有什么404错误?

使用Django/nginx的静态内容有什么404错误?
EN

Stack Overflow用户
提问于 2015-02-02 01:47:42
回答 2查看 111关注 0票数 0

我的媒体或静态内容都没有出现,每次加载页面时,我都会看到404个错误。

支持nginx/站点的代码片段(下面这些位置是我希望静态和媒体内容在这里的理想位置)

代码语言:javascript
复制
location /media {
alias /home/django/django/proj/proj/media;
}

location /static {
alias /home/django/django/proj/proj/static;
}

settings.py中与“静态”相关的所有内容的片段

代码语言:javascript
复制
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",
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-02-02 02:14:24

您的nginx别名必须与您的STATIC_ROOTMEDIA_ROOT设置相匹配,否则nginx将不知道在哪里找到这些文件。

代码语言:javascript
复制
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中的locationalias设置。

静态文件要复杂一些。Django处理静态文件的方式是,manage.py collectstatic使用STATICFILES_FINDERS查找所有静态文件。这包括STATICFILES_DIRS目录中的所有文件。符号链接是在您的STATIC_ROOT目录中使用相同的相对名称生成的。

由于无法创建与文件链接完全相同的符号链接,所以您的path+name需要与您的STATICFILES_DIRS不同。如果所有静态文件都驻留在应用程序特定的静态文件夹中,则可以省略STATICFILES_DIRS。但是,STATIC_ROOT设置是必需的,因为Django需要一个文件夹来收集所有符号链接,以便收集文件。

这些符号链接是允许第三方应用程序(不在项目根目录中)仍然提供静态文件的一种方式。即使您的静态文件可以到处都是,例如在包含python包的文件夹中,但是您只需要为一个特定位置的静态文件配置nginx。这大大简化了服务器配置。

这些符号链接也是为什么在对静态文件进行更改之后总是需要运行collectstatic的原因。否则,nginx将找不到一个链接来指示实际文件的位置,并且无法提供该文件。

票数 1
EN

Stack Overflow用户

发布于 2015-02-02 01:55:52

更改nginx配置中的路径(注意site_media部分)?

代码语言:javascript
复制
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:

代码语言:javascript
复制
MEDIA_URL = "/media/"
STATIC_URL = "/static/"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28270081

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档