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

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

      STATIC_URL = "static/"

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

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

1 ответ

Вы можете поместить статический 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, это статический URL-адрес, а не , он будет работать в том же домене, но (опять же) будет проходить через запросы. Такhttps://django-server-example.com/static/приведет кhttps://example.com/static/(без редиректа).

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

Так что помните, django больше не обрабатывает ваши статические файлы. Но все же установитеSTATIC_URL, таким образом ваш{% static %}тег шаблона работает.

Другие вопросы по тегам