Получил свой проект Django в веб-приложении Azure, но когда я вызываю терминал SSH:
Python manage.py collectstatic
Он говорит, что скопировано 252 файла, но мои статические файлы не видны в моих шаблонах, а статическая папка в wwwroot пуста ... Вот моя структура wwwroot:
wwwroot
|---Myproject
|---manage.py
|---oryx-manifest.toml
|---hostingstart.html
|---static //With all my static files
├── myapp
│ ├── migrations
│ ├── __pycache__
│ ├── static
| | |---Images
| | | |--myimage.png
| | | |--myimage2.png
│ └── templates
А это мои настройки.py:
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
STATIC_ROOT = os.path.join(BASE_DIR, 'static/')
STATIC_URL = '/static/'
STATICFILES_DIRS = (
('myapp', os.path.join(BASE_DIR, 'myapp', 'static')),
)
STATICFILES_FINDERS = (
'django.contrib.staticfiles.finders.FileSystemFinder',
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
)
Любая идея, почему или что я делаю неправильно? Azure собирает разные?
РЕДАКТИРОВАТЬ> Когда я захожу на свой сайт, мои изображения не отображаются... Я называю их так по шаблону:
{% load static %}
<img src = "{% static 'Images/myimage.png' %}" /><br>
РЕДАКТИРОВАТЬ 2 /////
В wwwroot действительно создается папка со всей моей статикой, но когда я загружаю свой шаблон, они не отображаются, в консоли wen я получаю эту ошибку для myimage.png и myimage2.png:
Failed to load resource: the server responded with a status of 404 (Not Found)
@DorisLv Спасибо за ответ, конечно, я обновил свой вопрос, добавив структуру папок wwwroot, теперь он говорит, что скопировано 252 файла, но статическая папка все еще пуста, и мои изображения не отображаются на моем веб-сайте.
@jsanchezs Как вы развертываете свое приложение в Azure?
@BhargaviAnnadevara Я использовал центр развертывания на портале Azure.
@jsanchezs Вы пытались скопировать их вручную и проверить? Или с другим методом развертывания?
@jsanchezs Любое обновление с вышеперечисленным?
Я бы порекомендовал проверить Whitenoise для обслуживания ваших статических файлов с помощью Django. У меня не было проблем с их обслуживанием с момента интеграции Whitenoise. Попробуйте заменить его на текущую настройку поиска статических файлов.
Несколько замечаний:
Нижняя строка изменится
STATIC_ROOT = (os.path.join(BASE_DIR, 'Myproject/static_files/'))
к
STATIC_ROOT = os.path.join(BASE_DIR, 'static/')
Здесь вы указываете на совершенно другую папку. Следовательно, всегда пусто. Вам нужна команда collectstatic для копирования файлов в Проект > статический каталог
Ниже удалите строку os.path.join(BASE_DIR, 'static/')
...
STATICFILES_DIRS = (
os.path.join(BASE_DIR, 'static/'), #Not Required since you already mentioned it in STATIC_URL
('myapp', os.path.join(BASE_DIR, 'myapp', 'static')),
)
STATIC_ROOT
— это папка, в которой будут храниться статические файлы после
с помощью manage.pyАбсолютный путь к каталогу, в котором будет собирать collectstatic статические файлы для развертывания.
Если приложение staticfiles contrib включено (по умолчанию), команда управления collectstatic соберет статические файлы в этот каталог. Дополнительные сведения см. в руководстве по управлению статическими файлами. об использовании.
STATICFILES_DIRS
— это список папок, в которых Django будет искать
дополнительные статические файлы помимо статической папки каждого приложения
установлен.Этот параметр определяет дополнительные местоположения, которые приложение staticfiles будет пройти, если включен искатель FileSystemFinder, например. если вы используете команда управления collectstatic или findstatic или используйте команду static просмотр файлового сервиса.
Если проблема не устранена, проверьте каталог статических файлов в конфигурационном файле apache mod_wsgi на сервере, если он настроен правильно.
Перейдите по этой ссылке, чтобы получить помощь по этому вопросу >> https://docs.djangoproject.com/en/3.1/howto/deployment/wsgi/modwsgi/
Ваше здоровье!!!
Спасибо за ваш добрый ответ. Сделал то, что вы мне сказали, но до сих пор не получаете статику, я имею в виду, что в wwwroot collectstatics действительно создает папку со всем, но когда я загружаю свою страницу, они не отображаются, а в веб-консоли отображается: Не удалось загрузить ресурс: сервер ответил со статусом 404 (не найдено)...
Не могли бы вы поделиться конфигурациями развертывания вашего приложения django в Azure? Как и где вы указали свою статическую папку в своей конфигурации?
Большой. Удачи друг! :)
@jsanchezs Это работает, только если вы включаете режим отладки, и перестает работать, как только вы отключаете отладку, которую нельзя использовать для производства. Заработало ли это, пока DEBUG = False?
Нашел !!
Просто нужно было добавить это: + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) для таких шаблонов URL:
from django.conf import settings
from django.conf.urls.static import static
urlpatterns = [
path('myapp/', include('myapp.urls')),
path('admin/', admin.site.urls),
] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
И это помогло, надеюсь, это поможет кому-то еще !!
Не забудьте импортировать настройки: from django.conf import settings
Знаете ли вы, почему это не требуется локально, но требуется в Azure?
Django не обслуживает статические файлы в рабочем режиме.
Единственный раз, когда он обслуживает статические файлы, это когда вы включаете DEBUG = True, который находится в режиме разработки, и это не рекомендуется в производственных настройках.
Django рекомендует обслуживать статические файлы через CND или любой другой веб-сервер. Однако, если ваш веб-сайт минимален и не получает большого объема трафика, вы можете обслуживать свои статические файлы с помощью белого шума Django, и вот как вы это делаете.
Приведенное ниже решение работает на python 3.7 и Django 3.2.
Шаг 1: Установите пакет whitenoise
pip install whitenoise
Шаг 2. Убедитесь, что ваш каталог BASE_DIR выглядит так, как показано ниже.
BASE_DIR = Path(__file__).resolve().parent.parent
Шаг 3: Добавьте их в свой settings.py. Если вы получаете какие-либо ошибки, попробуйте закомментировать STATICFILES_STORAGE и проверить
STATIC_ROOT = BASE_DIR / 'staticfiles'
STATIC_URL = '/static/'
STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'
Шаг 4: промежуточное ПО WhiteNoise должно быть размещено непосредственно после Django SecurityMiddleware (если вы его используете) и перед всеми остальными промежуточными программами.
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'whitenoise.middleware.WhiteNoiseMiddleware',
# ...
]
Шаг 5: Убедитесь, что именно так вы ссылаетесь на статические файлы в своих шаблонах (также проверьте, упоминается ли {% load static %}
в вашем шаблоне
<link rel = "stylesheet" type = "text/css" href = "{% static 'appname/styles.css' %}">
Шаг 6: Запустите сбор статики
python manage.py collectstatic
Шаг 7: Установите DEBUG = False и запустите сервер, чтобы убедиться, что он работает.
Некоторые дополнительные ресурсы для дальнейшего чтения:
Вы не можете найти папку с именем staticfiles на корневом уровне (тот же каталог, что и myapp/)? Не уверен насчет этой строки «мои статические файлы не видны в моих шаблонах». Не могли бы вы опубликовать структуру папок в wwwroot?