2013-12-09 5 views
0

В моей рабочей среде у меня есть Nginx, обслуживающий статические файлы для моего приложения Django, но при разработке я разрешил Django работать.Django для обслуживания статических файлов с исключениями

Мне нужно, чтобы Nginx обслуживал все статические файлы , но те, которые находятся в определенном подкаталоге. Итак, сторона Django, мне нужно перехватить этот каталог и относиться к нему по-другому.

Как я могу заставить сервер Django dev перехватить все вызовы на /static/*, но не на /static/myspecialfiles/*´ and hence write a url route to handle the GET calls to said/static/myspecialfiles/* '?

ответ

0

Вам необходимо решить это в двух областях: Django и nginx.

Для Django, так как работает локальная установка (когда DEBUG=True) уже служит статический контент из STATIC_ROOT автоматически, просто добавьте URL конф для специальных файлов:

# in urls.py 
url(r'^/static/specialfiles/', SpecialView.as_view(), name='special'), 

Затем в вашем Nginx конф, убедитесь, вы проигнорируете этот путь, так что на самом деле достигает Джанго:

server { 
    listen 80; 
    server_name example.com; 

    location/{ 
     proxy_pass http://localhost:8000; 
    } 

    location /static/specialfiles/ { 
     proxy_pass http://localhost:8000; 
    } 

    location /static/ { 
     alias /home/ubuntu/dev/example/static/; 
    } 
} 

Поскольку места выполняются последовательно, ваши специальные файлы попали в блок Джанго до общего статического блока.

Но на самом деле вам лучше всего переместить ваши специальные файлы в другое место.

+0

спасибо. это именно то, что я сделал, но у меня создалось впечатление, что мой диспетчер url никогда не был достигнут и что статические файлы обслуживаются * до *. если я прокомментирую «django.contrib.staticfiles», из INSTALLED_APPS этот URL-адрес перехвачен, иначе нет. – pistacchio

+0

Я был под впечатлением, что статические конфеты добавляются к вашему конфигу, но похоже, что это не так. Я придерживаюсь своего предложения переместить файлы в другом месте. –

Смежные вопросы