django runserver не может найти файлы c, но удаленный сервер может - PullRequest
0 голосов
/ 28 февраля 2020

Я пишу на Pycharm, нажимая на PythonAnywhere через GitHub. Джанго3 и Python3 .7. Работа с учебником Django Girls.

Я определил в settings.py

STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')

У меня есть шаблон с

{% load static %}

<!DOCTYPE html>
<html lang="en">
<head>
    <link rel="stylesheet" href="{% static "blog/css/blog.css" %}">
    <meta charset="UTF-8">
    <title>DG Tutorial</title>
</head>
...

Я пробовал python manage.py findstatic blog.css это не может найти это. Я пробую варианты static / blog / css / blog. css и /blog/css/blog.css и получаю длинное сообщение об ошибке, которое заканчивается:

django .core .exceptions.SuspiciousFileOperation: Объединенный путь >>> (/ blog. css) находится вне компонента базового пути (/Users/alesha/.virtualenvs/blog/lib/python3.7/site-packages/ django / contrib / admin / stati c)

Итак, мне интересно, почему он не смотрит в STATIC_ ROOT, который расположен вне компонента базового пути. Или сделал это? Я не знаю.

Затем я проверил django баг-трекер. Нет, это я.

Итак, странная часть заключается в том, что когда я портирую код на PythonAnywhere, он работает так, как должен, - блог. css обслужен и счастья предостаточно.

Я прочитал миллионы сообщений по этому поводу, все django учебные страницы по staticFiles - о которых я знаю, я проверил на наличие четырех ошибок. Я тупой - ведь это работает! Только не на localhost.

Спасибо за помощь в моем первом в истории вопросе переполнения стека.

Мои рабочие каталоги

Местные и пульт

1 Ответ

0 голосов
/ 29 февраля 2020

Есть два решения этой проблемы. Сначала это немного сбивает с толку, но каталог STATIC_ROOT должен быть пустым . Во время развертывания, когда вы запускаете команду manage.py collectstatic, Django просматривает подкаталог static каждого приложения и копирует все файлы stati c в STATIC_ROOT, и веб-сервер будет обслуживать их из этого каталога (это почему это работает на PythonAnywhere). Но по умолчанию команда findstatic не будет искать stati c файлы в каталоге STATIC_ROOT. Быстрый обходной путь - просто добавьте STATIC_ROOT к STATICFILES_DIRS в settings.py, тогда Django также будет искать stati c файлы в этом каталоге.

Но моя рекомендация Вы должны следовать «официальному» способу хранения файлов stati c, которые находятся внутри подкаталога static приложения (например, mysite/blog/static/blog/css/blog.css), и хранить STATIC_ROOT пустым.

...