Разместите всю свою статику (css, js, картинки, шрифты) в папку staticfiles в корне проекта или в папке static какого-либо приложения.
Разместите всю медиа (загружаемые пользователем файлы) в папке media в корне проекта.
В settings.py укажите следующие настройки:
# добавим это чтоб не писать полные пути
import os
BASE_DIR = os.path.dirname(os.path.dirname(__file__))
# настроим статику
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
STATICFILES_DIRS = (
os.path.join(BASE_DIR, 'staticfiles'),
)
# И заодно еще медийку
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'
В настройках nginx в секцию server добавьте следующие локейшены:
location /media {
alias /full/path/to/you/project/media; # Это полный путь к папке media в корне вашего проекта
expires max;
}
location /static {
alias /full/path/to/you/project/static; # Это полный путь к папке static в корне вашего проекта
expires max;
}
Перезапустите nginx.
Выполните команду
python manage.py collectstatic
Что будет происходить и для чего это нужно:
collectstatic пробежится по всем папкам, перечисленным в STATICFILES_DIRS, а также по всем папкам static внутри каждого приложения django, указанного в INSTALLED_APPS. Все найденные там файлы он сложит в одну папку, указанную в STATIC_ROOT, то есть в static. Nginx направлен на эту папку и будет раздавать из нее файлы.
Нужно это для хранения статики отдельно в каждом приложении, чтоб оно было независимым и при этом не приходилось на каждый запрос лазить по всем папкам и искать там файлы, как это делает dev-сервер.
С media (если она вам нужна) все немного проще. Django будет складывать туда файлы, а nginx их раздавать.