Неверный путь загрузки в Django - PullRequest
0 голосов
/ 09 мая 2020

Я настроил Django3.0 / Ubuntu 18 / NginX Media root в URL.py:

if settings.DEBUG:
    urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

и в Nginx:

server {
    listen 80;
    server_name XXXXX.com;

    location = /favicon.ico { access_log off; log_not_found off; }
    location /static/ {
        root /home/user/proj;
    }
    location /media/ {
        root /home/user/proj;
    }

    location / {
        include proxy_params;
        proxy_pass http://unix:/run/proj_gunicorn.sock;
    }
}

и в моделях у меня есть FileField и ImageField с атрибутом upload_to. Когда я загружаю что-то через администратора, все в порядке, и файлы будут загружаться в подпапки (eg. media/2020/avatar/1.jpg), но когда я делаю это через формы, файлы будут загружены в правильные подкаталоги, но URL-адрес изображения (или файла) показывает root медиа (eg. media/1.jpg), и когда я нажимаю на URL, он возвращает 404. Я не могу понять, почему это происходит, я использовал эту конфигурацию на десятках веб-сайтов, и они работают как шарм. Есть идеи?

1 Ответ

0 голосов
/ 09 мая 2020

Вы говорите, что изображение находится в папке media/2020/avatar/1.jpg, а ваш URL-адрес media/1.jpg, что кажется странным, поскольку nginx попытается найти его в папке media, а не в созданной подпапке. Вы должны указать URL-адреса типа media/2020/avatar/1.jpg в вашем html.

...