Django - 在子路径中运行时静态文件的问题

Ian*_*ski 5 python django nginx

我有 django 应用程序在 subpath 中运行example.com/api/。大部分是rest API(我使用django-rest-framework),所有请求都正常工作。但是静态文件到处都有错误的路径 - 在管理面板和请求页面中(在 django-rest-framework 中,你有前端来调查事情)。Django 以某种方式认为,当所有静态文件example.com/back/static/位于example.com/api/back/static/.

example.com/api/admin重定向到example.com/admin/login/,但手动转到后example.com/api/admin/login/一切工作顺利(但仍然没有样式)。

我的堆栈是在 docker 容器中运行的 nginx + Django 2.0.5。

Nginx 配置:

location /api/ {
    proxy_pass            http://localhost:8000/;
    proxy_read_timeout    90;
    proxy_connect_timeout 90;
    proxy_set_header      Host $host;
    proxy_set_header      X-Real-IP $remote_addr;
    proxy_set_header      X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header      Proxy "";
}
Run Code Online (Sandbox Code Playgroud)

当谈到DjangoSTATIC_URL设置为 时os.path.join(BASE_DIR, "static/")FORCE_SCRIPT_NAME没有设置,但是设置后,它根本不起作用。

有任何想法吗?

[更新]

经过几个小时的战斗,我放弃了。问题与 uwsgi 无法识别它在子路径中运行有关。以下是一些对于遇到类似问题的人可能有用的链接:

通过 nginx+uwsgi 在子路径中运行 django 应用程序

在子路径上运行 Django

使用 Nginx 和 Gunicorn 为多个 Django 应用程序提供服务

Django WSGI 路由

我放弃了,只是为这个项目创建了单独的子域。

Moh*_*Ali 0

将此代码添加到您的 nginx 配置中:

location /static/ {
    alias /path/static/;
}
Run Code Online (Sandbox Code Playgroud)

您应该定义静态文件的位置,以便读取它。