Django псевдоним для статического пути к файлу

У меня есть проект Django 4.1 и я хочу сделать псевдоним для директории со статическими файлами. Итак, в settings.py у меня есть

STATIC_URL = "static/"

Все мои статические файлы находятся в каталоге example.com/static/.... Я хочу сделать ярлык на одну из директорий статических файлов. Например, example.com/magic/... должен быть таким же, как example.com/static/physics/.... Это не должно быть перенаправлением , потому что если это будет перенаправление, я не смогу загрузить файл с помощью curl без каких-либо специальных опций.

Как я могу это сделать? Может быть, с помощью специальных путей в urls.py?

Вы можете поместить статический url в

STATIC_URL = "http://example.com/static/"

Делать ярлыки в каталогах/переадресацию без редиректа лучше на сервере типа Nginx. Пример конфигурации для nginx:

server {
    # the port your site will be served on
    listen      80;
    # the domain name it will serve for
    server_name localhost; # substitute your machine's IP address or FQDN
    charset     utf-8;

    # max upload size
    client_max_body_size 75M;   # adjust to taste

    location /static{
        proxy_pass http://example.com/static;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

    location /magic{
        proxy_pass http://example.com/static/physics;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }


    # Finally, send all non-static requests to the Django server.
    location / {
        proxy_pass http://127.0.0.1:8080; # This will be your production server. Please do not use django's built in runserver.
    }

}

Это, по сути, будет передавать запросы в nginx, прямо на домен (example.com), таким образом, перенаправление происходит в бэкенде, а пользователь (или curl в вашем случае) ничего не заметит. При этом не используется медленный интерпретатор python, nginx сделан прямо на C.

Если вы пойдете по пути nginx, https://django-server-example.com/static/ - это статический url, а не https://example.com/static/, он будет запущен на том же домене, но он (опять же) будет пропускать запросы. Таким образом, https://django-server-example.com/static/ приведет к https://example.com/static/ (без редиректа).

Если вы используете nginx, установите статический url в STATIC_URL = "/static/"

Помните, что django больше не обрабатывает ваши staticfiles. Но все же установите STATIC_URL, таким образом ваш {% static %} templatetag работает.

Вернуться на верх