Фоновый рисунок HTML

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

<!DOCTYPE html> <html lang="en" xmlns="http://www.w3.org/1999/html"> {% load staticfiles %} <head> <title>{% block title %}Local 9{% endblock %}</title> <style type="text/css"> body { background-image: url('{{STATIC_URL}}img/background.jpg'); } </style> </head> <body> <div id="content"> {% block content %}{% endblock %} </div> </body> </html> 

У меня есть файл в нужном месте. Я также делаю это в своем home.html:

 {% extends "base.html" %} {% block content %} <a>HI</a> {% endblock %} 

Я использую default settings.py. Мой STATIC_URL = '/ static /' … У меня полная потеря. Любые мысли или предложения будут действительно полезными.

  • Как разбить вектор на столбцы - используя PySpark
  • выбирать комбинации из нескольких списков
  • Как отобразить облако точек в vtk в разных цветах?
  • Python: заменить регулярным выражением
  • Не удалось загрузить репозиторий (PyDev для eclipse)
  • Пакетное приложение PyInstaller отлично работает в режиме консоли, сбой в режиме окна
  • Pycharm установил правильную переменную окружения PATH
  • Вызов родительского класса __init__ с множественным наследованием, каков правильный путь?
  • 2 Solutions collect form web for “Фоновый рисунок HTML”

    Есть несколько вещей, которые могут пойти не так, как со статическим файлом, работающим на Django. Пройдите свой контрольный список:

    Неправильно установлена

    Во-первых, в settings.py:

     INSTALLED_APPS = ( ... 'django.contrib.staticfiles', ... ) STATICFILES_STORAGE = 'django.contrib.staticfiles.storage.StaticFilesStorage' 

    Параметр STATICFILES_STORAGE определяет, какой бэкэнд будет использовать функция collectstatic . В развертывании этот параметр можно изменить так, чтобы collectstatic файлы вместе и отправлял их на Amazon S3.

    Неверный или отсутствующий маршрут

    Теперь в urls.py:

     from django.conf.urls.static import static from myapp import settings urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) 

    Это добавляет маршрут под названием «статический», который затем следует ссылаться в каждом шаблоне, где вы хотите использовать статические файлы:

     {% load staticfiles %} <img src="{% static 'path/to/my/image.jpg' %}" /> 

    Файлы, не найденные collectstatic

    Если у вас все еще есть проблемы, ваши файлы могут не быть найдены командой collectstatic . Эта команда следует определенным правилам, чтобы найти ваши статические файлы, а затем скопировать их в место, из которого они будут обслуживаться. Есть несколько доступных бэкэндов, которые расскажут, как это сделать, и они настроены в settings.py:

     STATICFILES_FINDERS = ( 'django.contrib.staticfiles.finders.FileSystemFinder', 'django.contrib.staticfiles.finders.AppDirectoriesFinder', ) 

    AppDirectoriesFinder работает следующим образом: «Просмотрите каждое из приложений в INSTALLED_APPS , и если в этом приложении есть папка« static », скопируйте ее"

    FileSystemFinder: «Скопируйте все каталоги, перечисленные в STATICFILES_DIRS »

    Скажем, вы сохранили свои статические файлы в двух разных папках в своем проекте: «изображения» и «звук». AppDirectoriesFinder не может найти их, потому что они не живут в папке с именем «static». FileSystemFinder может, но только если вы используете STATICFILES_DIRS чтобы точно сказать, где это должно выглядеть:

     # settings.py # Set PROJECT_DIR to be the folder where settings.py lives: PROJECT_DIR = os.path.dirname(os.path.abspath(__file__)) STATICFILES_DIRS = (os.path.join(PROJECT_DIR, 'images'), os.path.join(PROJECT_DIR, 'audio'), ) 

    Вы должны использовать полные пути для каждого каталога в STATICFILES_DIRS , как я это сделал.

    STATIC_ROOT и STATIC_URL

    Теперь вы убедились, что ваши статические файлы можно обнаружить, collectstatic соберет их и скопирует в STATIC_ROOT . Придерживаясь моего примера, я мог бы добавить следующее в мои настройки.py:

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

    Теперь, когда я запускаю collectstatic , он сначала будет использовать FileSystemFinder для поиска моих «изображений» и «аудио» папок. Он скопирует их в «статическую» папку ( STATIC_ROOT ). Затем AppDirectoriesFinder начнет работать и ищет «статические» папки в каждом из моих INSTALLED_APPS . Если я установил Django Admin, например, AppDirectoriesFinder найдет статические файлы в этом приложении и скопирует их.

    Теперь все файлы находятся в папке «static» в моем проекте – если я открою эту папку, я должен ожидать увидеть копии моих «образов» и «аудио» каталогов, а также каталог «admin», если у меня был Django Установлен администратор.

    Бесконечная сага с статической установкой django. Сколько раз я прошел через это. Вот (почти), как я это делаю.

     # settings.py MEDIA_ROOT = path.join(PROJECT_DIR, 'media') MEDIA_URL = '/media/' STATIC_ROOT = os.path.join(PROJECT_DIR, 'static') STATIC_URL = '/static/' STATICFILES_DIRS = ( os.path.join(PROJECT_DIR, 'assets'), ) # urls.py from django.conf import settings urlpatterns = patterns('', ... # normal patterns here ) if settings.DEBUG: urlpatterns += patterns('', url(r'^static/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.STATIC_ROOT, 'show_indexes': True}), url(r'^media/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.MEDIA_ROOT, 'show_indexes': True}), ) 

    Во время разработки сохраняйте свои статические файлы только в каталоге ресурсов. И не делайте collectstatic в развитии. На всякий случай, я сохраняю /static запись в моем файле .gitignore . Запускайте collectstatic только в производстве, чем содержимое вашего каталога ресурсов будет скопировано на статичное и будет отправлено через nginx (или другую службу).

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

    Python - лучший язык программирования в мире.