Подтвердить что ты не робот

Файлы Jango Static 404

Я не могу получить статические файлы. Я пробовал различные настройки и конфигурации каталогов и так далее, но они просто появляются как 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">

Любые идеи? Благодаря

4b9b3361

Ответ 1

Это рабочее решение для доступа к static/media/template в django для окон,

settings.py

import os.path

STATIC_ROOT = ''

STATIC_URL = '/static/'

STATICFILES_DIRS = ( os.path.join('static'), )

Ответ 2

Для меня это оказалось вызвано установкой debug на false в settings.py. Обходным путем является переход на --insecure на runserver, но реальным решением является использование надлежащего веб-сервера для обслуживания статических файлов. Подробнее см. Ответы на этот вопрос.

Ответ 3

Если вы используете это на веб-сервере, вы копируете статические файлы в общедоступную папку? Например:

# 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

Надеюсь, что это поможет!

Ответ 4

Я просто добавил эквивалент

STATICFILES_DIRS = (
    '/absolute_path_to_project/mealmate/static',
)

чтобы это работало. Конечно, замените absolute_path_to_project на ваш фактический путь и, при необходимости, добавьте букву диска.

Ответ 5

Я также застрял в проблеме 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, он работает правильно.

Если ни один из вышеперечисленных ответов не работает, вы можете проверить конфигурацию своего сервера.

Ответ 6

Удостоверьтесь, что мультяшка находится в вашем INSTALLED_APPS

Ответ 7

из комментариев выше - запустите этот

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'),
)

Ответ 8

Я предполагаю, что вы используете 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">

Ответ 9

в 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/

Ответ 10

Я думаю, что вы пропустили установку приложения 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. У меня были проблемы с командами, и именно так я это исправил.

Ответ 11

В моем случае все, что мне нужно было сделать, это перезапустить сервер:

python manage.py runserver

Ответ 12

Если вы недавно изменили отладку на false в файле настроек. Следуйте этой процедуре.

В большинстве случаев это вызвано тем, что параметр отладки имеет значение false в settings.py. Если вы передадите переключатель --insecure серверу выполнения, он должен работать. Поэтому, если вы сделаете python manage.py runserver 0.0.0.0:8000, измените его на python manage.py runserver 0.0.0.0:8000 --insecure.

Он должен работать.