我觉得有点尴尬的问一个之前已经回答过的问题 - 但是我觉得有一个不同点就是让节点服务于静态文件而不是django。由webpack捆绑并由节点提供服务的css没有问题,我遇到问题的是使用get_static_prefix装饰器提供admin css和另外几个其他文件。
文件结构如下:
root
|
public
- templates
- static
| <-- collectstatic adding files here
- vendor
|
server
- app1
- app2
| settings.py
的/ etc / nginx的/位点可用/项目
server {
listen xxx.xxx.xxx.xxx:8000;
server_name xxx.xxx.xxx.xxx;
location /static {
alias /root/se/env/public/static/;
}
}
和settings.py中的设置
STATIC_URL = '/root/se/env/public/static/'
MEDIA_URL = '/media/'
STATIC_ONLY_URL = '/static_only/'
if not DEBUG:
MEDIA = '/media',
STATIC_ROOT = '/root/se/env/public/static/'
MEDIA_ROOT = os.path.join(os.path.dirname(BASE_DIR), 'public', 'media')
STATICFILES_DIRS = '/root/se/env/public/vendor/static/',
我已经在圈子里走了一段时间了。我对Django很陌生,并且真的不知道这是怎么回事。根据我的理解,STATICFILES_DIRS是collectstatic收集静态文件的地方,STATIC_ROOT是在运行collectstatic之后转储静态文件的地方。我认为STATIC_URL是我出错的地方 - 但我没有太多运气搞清楚。
现在,当DEBUG = True时,admin css也无法正常工作,所以我的配置错误。它导致:
Not Found: /static/admin/css/base.css
答案 0 :(得分:3)
您的location /static
错了。 alias
指令在形成路径名时替换URI的一部分。 location
参数和alias
参数都应该以{{1}}结尾,或者两者都不以/
结尾:
/
或:
location /static {
alias /root/se/env/public/static;
}
实际上,因为location /static/ {
alias /root/se/env/public/static/;
}
参数以alias
参数结尾,所以您根本不应该使用location
指令。请参阅the alias
documentation末尾的注释。
alias