Ответ 1
Это рабочее решение для доступа к static/media/template в django для окон,
settings.py
import os.path
STATIC_ROOT = ''
STATIC_URL = '/static/'
STATICFILES_DIRS = ( os.path.join('static'), )
Я не могу получить статические файлы. Я пробовал различные настройки и конфигурации каталогов и так далее, но они просто появляются как 404s. У меня установлен debug_toolbar, поэтому знайте, что STATIC_URL достигает моего контекста запроса.
Структура каталогов, показывающая/статическая (я также разместил каталог внутри папки приложения для приемов пищи и пользователей, просто чтобы попробовать.
/mealmate
/mealmate
/meals
/static
/css
/bootstrap.min.css
/templates
/users
Settings.py(несколько важных настроек, хотя я экспериментировал с множеством других):
MEDIA_ROOT = os.path.join(PROJECT_PATH, 'media/')
STATIC_URL = '/static/'
INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
)
WSGI_APPLICATION = 'mealmate.wsgi.application'
В base.html rendered
<link rel="stylesheet" href="/static/css/bootstrap.min.css">
Любые идеи? Благодаря
Это рабочее решение для доступа к static/media/template в django для окон,
settings.py
import os.path
STATIC_ROOT = ''
STATIC_URL = '/static/'
STATICFILES_DIRS = ( os.path.join('static'), )
Для меня это оказалось вызвано установкой debug на false в settings.py
. Обходным путем является переход на --insecure
на runserver
, но реальным решением является использование надлежащего веб-сервера для обслуживания статических файлов. Подробнее см. Ответы на этот вопрос.
Если вы используете это на веб-сервере, вы копируете статические файлы в общедоступную папку? Например:
# web accessible folder
STATIC_ROOT = '/home/your_name/www/mealmate/static/'
# URL prefix for static files.
STATIC_URL = '/static/'
# Additional locations of static files
STATICFILES_DIRS = (
# location of your application, should not be public web accessible
'/home/your_name/website/mealmate/static',
)
# List of finder classes that know how to find static files in
# various locations.
STATICFILES_FINDERS = (
'django.contrib.staticfiles.finders.FileSystemFinder',
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
)
Затем вы можете использовать этот пост статические файлы Django и скопировать статические файлы в общедоступную папку с помощью manage.py
# --link Create a symbolic link to each file instead of copying.
# --noinput Do NOT prompt the user for input of any kind.
#
python manage.py collectstatic -link --noinput
Надеюсь, что это поможет!
Я просто добавил эквивалент
STATICFILES_DIRS = (
'/absolute_path_to_project/mealmate/static',
)
чтобы это работало. Конечно, замените absolute_path_to_project
на ваш фактический путь и, при необходимости, добавьте букву диска.
Я также застрял в проблеме 404, пока не понял, что Apache заблокировал запросы к статическому каталогу. Я использовал python manage.py collectstatic
для копирования всех статических файлов в директорию static под моим корнем проекта, т.е. /var/my/site/static. С
Alias /static /var/my/site/static
<Directory /var/my/site/static>
Require all granted
</Directory>
в /etc/httpd/conf/httpd.conf, он работает правильно.
Если ни один из вышеперечисленных ответов не работает, вы можете проверить конфигурацию своего сервера.
Удостоверьтесь, что мультяшка находится в вашем INSTALLED_APPS
из комментариев выше - запустите этот
python manage.py findstatic --verbosity 2 css/styles.css
Не найдено подходящего файла для 'css/styles.css'.
Поиск в следующих местах:
/Users/вашеимя/Документы/Workspace/тест/staticfiles
Я просто переименовал свою статическую папку в статические файлы, и все было хорошо. (Я нахожусь на OSX + Django 1.x)
Использование небезопасного режима может не повредить, если вы находитесь на локальной машине разработчика - в противном случае вы все равно можете получить 404 ошибки.
python manage.py runserver --insecure
UPDATE
на самом деле копаясь в settings.py нашел нарушающую линию.
STATICFILES_DIRS = (
os.path.join(BASE_DIR, 'staticfiles'),
)
Я предполагаю, что вы используете Django1.3 + здесь.
Во-первых, вам нужно определить еще несколько настроек:
STATICFILES_FINDERS = [
'django.contrib.staticfiles.finders.FileSystemFinder',
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
]
STATICFILES_DIRS = [
path.join(TOP_DIR, 'static'),
]
STATIC_ROOT = path.join(TOP_DIR, 'staticfiles')
STATIC_URL = '/static/'
Это поможет вам найти этот каталог.
Кроме того, вы всегда должны обращаться к своим статическим файлам с помощью STATIC URL
:
<link rel="stylesheet" href="{{ STATIC_URL }}css/bootstrap.min.css">
в Django у вас есть еще одно преимущество для ваших шаблонов, и вы можете связать статику, как это, и, возможно, это ваша проблема!
<script src="{% static 'myapp/bootstrap.min.js' %}"></script>
<link href="{% static 'myapp/bootstrap.css' %}" rel="stylesheet" type="text/css"/>
лучше использовать
{% static 'filename'%}
и его также проще чтобы узнать больше, я обращаюсь к https://docs.djangoproject.com/en/1.11/intro/tutorial06/
Я думаю, что вы пропустили установку приложения INSTALLED_APPS в ваш файл settings.py, вы должны добавить "напарник"
INSTALLED_APPS = (
'mealmate',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
)
После этого статические и командные файлы будут видны django. У меня были проблемы с командами, и именно так я это исправил.
В моем случае все, что мне нужно было сделать, это перезапустить сервер:
python manage.py runserver
Если вы недавно изменили отладку на false в файле настроек. Следуйте этой процедуре.
В большинстве случаев это вызвано тем, что параметр отладки имеет значение false в settings.py. Если вы передадите переключатель --insecure серверу выполнения, он должен работать. Поэтому, если вы сделаете python manage.py runserver 0.0.0.0:8000
, измените его на python manage.py runserver 0.0.0.0:8000 --insecure
.
Он должен работать.