Bootstrap не установлен в приложение Django

Bootstrap не установлен для моего приложения Django. В консоли Google Не удалось загрузить ресурс: сервер ответил со статусом 404 (Not Found) Ошибка bootflat.min.css. Я написал в settings.py

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
DEBUG =True

STATIC_URL = '/static/'

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

STATICFILES_DIRS = [os.path.join(BASE_DIR,'bootflat.github.io'), ]

в PythonServer_nginx.conf

server {
    # the port your site will be served on
    listen      8000;
    # the domain name it will serve for
    server_name MyServerIPAdress; # substitute your machine IP address or FQDN
    charset     utf-8;

    # max upload size
    client_max_body_size 75M;   # adjust to taste

    location /static {
        alias /home/ubuntu/PythonServer/PythonServer/accounts/static; # your Django project static files - amend as required
    }

    # Finally, send all non-media requests to the Django server.
    location / {
        uwsgi_pass  django;
        include     /home/ubuntu/PythonServer/uwsgi_params; # the uwsgi_params file you installed
    }
}

Я не знаю, почему Bootstrap не установлен в моем приложении Django. Я запускаю команду python manage.py collectstatic, но ошибки не возникает. Как я должен это исправить? Что мне написать?

Ответ 1

Я предполагаю, что проект работает нормально локально, эта проблема возникает только при использовании nginx. Если это так, вероятно, путь, который вы указали в конфигурации nginx для местоположения/статики, неверен, попробуйте получить абсолютный путь к статической папке с сервера и посмотреть.

Ответ 2

У меня нет возможности проверить мой ответ по очевидной причине, но ваши STATICFILES_DIRS и STATIC_ROOT не совпадают. Если вы измените STATICFILES_DIRS на [os.path.join(BASE_DIR,"/static/"),'https://bootflat.github.io'], это может сработать. Я предложил так, потому что для меня не имеет смысла использовать os.path.join локальный путь с открытым URL-адресом.

Ответ 3

Попробуйте это, В settings.py:

STATIC_DIR = os.path.join(BASE_DIR,"static")

Теперь, наконец, добавьте следующие строки:

STATIC_URL = '/static/'
STATICFILES_DIRS = [STATIC_DIR,]

Теперь поместите все ваши файлы начальной загрузки в "статическую" папку в папке проекта.

В вашем HTML-коде вам нужно загрузить статические файлы, используя:

{% load staticfiles %}

Теперь вы можете использовать свои статические файлы, используя:

<link rel="stylesheet" href="{% static "assets/css/bootstrap.min.css" %}">

Ps my 'bootstrap.min.css' присутствует в папке "статические", а затем "активы", а затем папка "css".

Он отлично работает для меня.

Ответ 4

Во-первых: где вы храните свои статические файлы начальной загрузки? Я рекомендую хранить их в каталоге приложения, где вы ссылаетесь на них в шаблоне. Например, если у вас есть приложение myapp я бы поставил их в /myapp/static/myapp/. Поэтому, если я /myapp/static/myapp/bootstrap.css bootstrap.css он зайдет в /myapp/static/myapp/bootstrap.css.

Далее, в вашем шаблоне вам нужно указать правильную статическую папку. Для таблицы стилей Bootstrap href будет выглядеть как href= "{% static 'myapp/bootstrap.css' }%"

Наконец, в файле settings.py добавьте строку STATIC_ROOT = '/home/ubuntu/PythonServer/PythonServer/accounts/static' (в зависимости от того, что вы написали, просто убедитесь, что она указывает на правильную папку развертывания, в которой вы держите ваши живые статические файлы) и снова запустите collectstatic.

Ответ 5

Прежде всего вам не нужен STATICFILES_DIRS поскольку django будет собирать статические файлы для вас из каждого INSTALLED_APP указанного в ваших settings.py. Вам нужно добавить bootstrap4 в INSTALLED_APP:

INSTALLED_APPS = [
    ...
    'my_great_app',
    'bootstrap4',
]

Вам нужно указать STATIC_ROOT и STATIC_URL как и в ваших settings.py. Вам нужно понять, почему вы используете каждую настройку.

  • Django использует STATIC_ROOT в команде collect_static, которая собирает все статические файлы из приложений и каталогов в STATICFILES_DIRS STATIC_ROOT. Например, вы создали новое приложение, в котором требуются статические файлы, вы запускаете ./manage.py collect_static чтобы поместить свои статические файлы в STATIC_ROOT где их обслуживает веб-сервер (nginx в вашем случае). При установке STATIC_ROOT следует показывать /home/ubuntu/PythonServer/PythonServer/accounts/static как показано в вашей конфигурации nginx.

  • STATIC_URL используется для создания статических URL-адресов файлов при использовании тега static template. Поскольку файлы обслуживаются nginx, вам нужен определенный путь, хост и т.д.

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

На вашем шаблоне вам нужно использовать что-то вроде следующего:

{% extends 'bootstrap4/bootstrap4.html' %}

{% load bootstrap4 %}
{# Display a form #}

<form action="/url/to/submit/" method="post" class="form">
    {% csrf_token %}
    {% bootstrap_form form %}
    {% buttons %}
        <button type="submit" class="btn btn-primary">Submit</button>
    {% endbuttons %}
</form>

Взято из django-bootstrap4 github repo.

Расширяя bootstrap4/bootstrap4.html вы получите требуемые файлы css и js в своем html. С помощью {% load bootstrap4 %} вы можете использовать tempatetags и фильтры bootstrap4.

Ответ 6

Попробуйте добавить следующий код в свой url.py

from django.contrib.staticfiles.urls import staticfiles_urlpatterns
urlpatterns += patterns('', (
    r'^static/(?P<path>.*)$',
    'django.views.static.serve',
    {'document_root': settings.STATIC_ROOT}
))

Добавить статическую корневую переменную в settings.py, как показано Luke B

STATIC_ROOT = '/home/ubuntu/PythonServer/PythonServer/accounts/static'

Проверьте документацию https://docs.djangoproject.com/en/2.0/howto/static-files/