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

Простой пример Django и CSS

Я новичок в Django и пытаюсь настроить действительно простое приложение Django.

Теперь я дошел до главы 5 в онлайн-книге Django: http://www.djangobook.com/en/2.0/chapter05/

Все, что я хочу сделать сейчас, прежде чем начинать пробовать базы данных, - это добавить в приложение простые CS и J как есть.

Итак, вопрос в том, как мне это сделать? У меня есть только одно приложение, и я хочу только main.css в папке css и main.js в папке js.

Я проверил страницу https://docs.djangoproject.com/en/1.3/howto/static-files/#staticfiles-in-templates, но после чтения и чтения, похоже, было не так много работы с примерами.

Как импортировать таблицы стилей /css (есть ли такой помощник, как CakePHP?), Куда мне поместить файлы CSS и JS, и нужно ли мне настраивать статические штуки?

ОБНОВЛЕНИЕ: ссылка: Рендеринг CSS в Django не сильно помогает. Главным образом в том, что это не сработало для меня, но также мне особенно не нравится часть "если отладка". Что происходит, когда я перехожу на прод? Почему в любом случае моя папка мультимедиа определяется по-разному для prod и local dev? Разве это не должно быть относительно или даже в одном месте?

4b9b3361

Ответ 1

Если вы следуете рекомендациям django, вы можете значительно упростить свою жизнь.

В вашем примере кода внутри каталога приложения создайте папку с именем static. Внутри этой папки поместите свои файлы css.

Пример:

$ django-admin.py startproject myproject
$ cd myproject
myproject$ python manage.py startapp myapp
myproject$ mkdir myapp/static
myproject$ cd myapp/static
myproject/myapp/static$ nano style.css

В ваших шаблонах:

<link rel="stylesheet" href="{{ STATIC_URL }}style.css" />

Убедитесь, что вы добавили myapp в список INSTALLED_APPS в settings.py. Теперь, когда вы используете встроенный сервер разработки, ваша таблица стилей будет отображаться правильно.

Django ищет каталог static внутри установленных приложений по умолчанию, а с текущими версиями django по умолчанию включены статические файлы.


Пример Django имеет путь my_app/static/my_app/myimage.jpg, который немного запутанно, если ваше приложение и проект имеют одинаковое имя.

Это рекомендуется, так как при запуске collectstatic для сбора всех ваших статических файлов файлы с тем же именем будут перезаписаны. Если в другом приложении есть файл с именем myimage.jpg, он будет перезаписан. Предоставление имени приложения внутри статического каталога предотвратит это, потому что точная структура каталогов будет реплицирована внутри вашего каталога STATIC_ROOT.

Простой пример, иллюстрирующий точку. Если у вас есть проект django с двумя приложениями, например:

.
├── assets
├── manage.py
├── myapp
│   ├── __init__.py
│   ├── models.py
│   ├── static
│   │   └── myapp
│   │       └── test.txt
│   ├── tests.py
│   └── views.py
├── myproj
│   ├── __init__.py
│   ├── __init__.pyc
│   ├── settings.py
│   ├── settings.pyc
│   ├── urls.py
│   └── wsgi.py
└── otherapp
    ├── __init__.py
    ├── models.py
    ├── static
    │   └── otherapp
    │       └── test.txt
    ├── tests.py
    └── views.py

assets - ваш STATIC_ROOT. Теперь, когда вы запустите collectstatic:

.
├── assets
│   ├── myapp
│   │   └── test.txt
│   └── otherapp
│       └── test.txt
├── manage.py
├── myapp
│   ├── __init__.py
│   ├── __init__.pyc
│   ├── models.py
│   ├── static
│   │   └── myapp
│   │       └── test.txt
│   ├── tests.py
│   └── views.py
├── myproj
│   ├── __init__.py
│   ├── __init__.pyc
│   ├── settings.py
│   ├── settings.pyc
│   ├── urls.py
│   └── wsgi.py
└── otherapp
    ├── __init__.py
    ├── __init__.pyc
    ├── models.py
    ├── static
    │   └── otherapp
    │       └── test.txt
    ├── tests.py
    └── views.py

Вы видите, что это также создает каталоги. В ваших шаблонах вы теперь будете ссылаться на каждый файл с его "пространством имен" приложения: {{ STATIC_URL }}/myapp/test.txt

Ответ 2

Для примеров, на которые вы указали, ваши статические файлы должны находиться в местоположении, доступном для встроенного приложения staticfiles для Django.

Есть несколько шагов, чтобы это произошло:

Во-первых, в вашем каталоге проекта (т.е. рядом с вашим файлом manage.py) вам нужно создать каталог для хранения ваших статических файлов. Назовите его "static_files".

Затем вам нужно будет позволить Django знать, что искать в этом каталоге, указав его в списке STATICFILES_DIRS в вашем файле settings.py.

Что-то вроде этого:

STATICFILES_DIRS = [
    '/full/path/to/your/project/static_files/',
]

Внутри этого каталога static_files вы можете создать любую структуру, которая вам нужна, так что ваши каталоги css и js могут пойти.

После этого вы сможете использовать тег {{ STATIC_URL }} в своих шаблонах, чтобы получить доступ к базовому URL ваших статических файлов.

Итак, скажем, например, вы создаете project/static_files/css/base.css, вы бы использовали его в своем шаблоне так:

<link rel="stylesheet" type="text/css" href="{{ STATIC_URL }}/css/base.css" />

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

Edit

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

Если это не сработает, проверьте некоторые вещи:

  • Вы отредактировали настройку STATICFILES_FINDERS для чего-то другого, кроме значения по умолчанию?
  • Является ли django.contrib.staticfiles в вашем списке INSTALLED_APPS в settings.py?
  • Используете ли вы встроенный сервер Django (python manage.py runserver)?
  • У вас есть DEBUG = True в вашем settings.py? Если нет, вам нужно либо установить его на True, либо использовать параметр insecure (python manage.py runserver --insecure). При переходе на производство ознакомьтесь с командой collectstatic.

Ответ 3

Рекомендуемый подход снова изменился (по крайней мере, с Django 1.5, я думаю).

В верхней части вашего шаблона поместите:

{% load staticfiles %}

Затем, используя ту же структуру каталогов (myapp/static/myapp/style.css):

<link rel="stylesheet" href="{% static 'myapp/style.css' %}" />

Источник

Ответ 4

Обработка статических файлов значительно изменилась (к лучшему) в Django 1.3. В частности, это гибкая разница между статическими файлами (думаю, код нужен CSS/JS/images) и медиафайлы (думаю, изображения, загруженные пользователями при использовании вашего приложения). Приложение staticfiles обрабатывает то, о чем вы просите.

Поместите django.contrib.staticfiles в свои settings.py INSTALLED_APPS. Затем создайте каталог static внутри вашего каталога приложений - так project/app/static/. Внутри этого статического каталога организуйте свои файлы поддержки по своему усмотрению (css/, js/, images/, icons/и т.д.). staticfiles по умолчанию будет выглядеть в каталоге static/для каждого приложения, указанного в INSTALLED_APPS. Не только ваши собственные, но все приложения Django и сторонние приложения. (sidenote: Admin в Django 1.4 переходит к этой парадигме, а в 1.3 он все еще использует ADMIN_MEDIA_PREFIX).

Приложение staticfiles знает обо всех этих статических/каталогах во всех приложениях, но ему нужно собрать все это содержимое для его обслуживания. В разработке при использовании manage.py runserver он обрабатывается для вас. Django запустит ваш сайт и автоматически доставляет весь статический контент из всех статических источников. (Источники, как упоминалось в другом ответе, устанавливаются в настройке STATICFILES_FINDERS.) Если вы не используете runerver, используйте manage.py collectstatic, чтобы собрать все статические файлы в папку, определенную в STATIC_ROOT. Храните этот каталог пустым. Это пункт назначения коллекции. Конечно, ваш веб-сервер должен быть настроен для обслуживания этого каталога.

Теперь есть еще один фрагмент - вид. Здесь вступает в игру STATIC_URL. При обращении к статическим файлам в ваших шаблонах самым простым способом является использование {{ STATIC_URL }}. По умолчанию Django делает эту переменную доступной для любого представления, используя RequestContext. Сделайте что-то вроде этого - <link rel="stylesheet" href="{{ STATIC_URL }}/css/main.css" />.

Для получения дополнительной информации и других способов обращения к STATIC_URL в ваших шаблонах ознакомьтесь с этим ответом по аналогичному вопросу.

Ответ 5

наконец, я получил после многих дней, вот как это должно быть сделано 1> вам нужен статический файл в вашем приложении вместе с вашим проектом 2> здесь setting.py

   if DEBUG:
   STATIC_ROOT = "/PycharmProjects/don/admin/shopping/static/css"

    STATICFILES_DIRS =(
     #os.path.join(os.path.dirname(BASE_DIR),"static","static"),
     os.path.join(BASE_DIR, "static"),
    )

3> views.py

        from django.views.generic import TemplateView
        class HomeView(TemplateView):
               template_name = 'index.html'

4> файл шаблона

       {% load staticfiles %}
        <link rel="stylesheet" href="{% static 'css/style.css' %}">

5> urls.py

            from shopping.views import HomeView 
             from django.conf import settings
             from django.conf.urls.static import static
           urlpatterns = [
            url(r'^admin/', admin.site.urls),
             url(r'^$', HomeView.as_view())
          ]
        if settings.DEBUG:
       urlpatterns+=static(settings.STATIC_URL,document_root=settings.STATIC_ROOT)

6>     python manage.py collectstatic  

have fun :)

Ответ 6

Кто-нибудь знает, как это сделать во Flask?