Какое место лучше всего разместить в проекте django?

Какое место лучше всего разместить в проекте django?

Ответ 1

Из книги Django глава 4:

Если вы не можете думать о очевидном месте для размещения ваших шаблонов мы рекомендуем создание каталога шаблонов в пределах ваш проект Django (т.е. в рамках Каталог mysite, созданный в Глава 2, если вы следовали наряду с нашими примерами).

Это именно то, что я делаю, и отлично поработал у меня.

Моя структура каталогов выглядит примерно так:

/media для всех моих CSS/JS/изображений и т.д.
/templates для моих шаблонов
/projectname для основного кода проекта (т.е. кода Python)

Ответ 2

Размещено в <PROJECT>/<APP>/templates/<APP>/template.html для шаблонов приложений, чтобы помочь сделать приложение повторно используемым в другом месте.

Для общих "глобальных" шаблонов я помещаю их в <PROJECT>/templates/template.html

Ответ 3

Вслед за Dominic и dlrust,

Мы используем исходный дистрибутив setuptools (sdist) для упаковки нашего проекта django и приложений для развертывания в разных средах.

Мы обнаружили, что шаблоны и статические файлы должны находиться в каталогах приложений django, чтобы их можно было упаковать с помощью setuptools.

Например, наши шаблоны и статические пути выглядят так:

PROJECT/APP/templates/APP/template.html
PROJECT/APP/static/APP/my.js

Чтобы это сработало, MANIFEST.in необходимо изменить (см. http://docs.python.org/distutils/sourcedist.html#the-manifest-in-template)

Пример MANIFEST.in:

include setup.py
recursive-include PROJECT *.txt *.html *.js
recursive-include PROJECT *.css *.js *.png *.gif *.bmp *.ico *.jpg *.jpeg

Кроме того, вам необходимо подтвердить в файле настроек django, что загрузчик app_directories находится в вашем TEMPLATE_LOADERS. Я думаю, что там по умолчанию в django 1.4.

Пример загрузчика шаблонов настроек django:

# List of callables that know how to import templates from various sources.
TEMPLATE_LOADERS = (
    'django.template.loaders.filesystem.Loader',
    'django.template.loaders.app_directories.Loader',
)

На всякий случай вам интересно, почему мы используем sdists вместо того, чтобы просто копировать файлы rsync; это часть нашего рабочего процесса управления конфигурацией, где у нас есть один сборник tarball, который развертывается с PIP без изменений в тестовых, приемных и производственных средах.

Ответ 4

Вы также можете рассмотреть возможность использования ваших шаблонов в базе данных, используя django-dbtemplates. Это также настройка для кеширования и приложение django-reversion, которое помогает вам хранить старые версии ваших шаблонов.

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

Ответ 5

DJANGO 1.11

добавить папку шаблонов, где существует файл manage.py, который является вашим базовым каталогом. измените DIRS для ШАБЛОНОВ, как указано в ваших настройках .py

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

TEMPLATES = [
{
    'BACKEND': 'django.template.backends.django.DjangoTemplates',
    'DIRS': [os.path.join(BASE_DIR, 'templates')],
    'APP_DIRS': True,
    'OPTIONS': {
        'context_processors': [
            'django.template.context_processors.debug',
            'django.template.context_processors.request',
            'django.contrib.auth.context_processors.auth',
            'django.contrib.messages.context_processors.messages',
        ],
    },
},

]

Теперь, чтобы использовать шаблон с помощью кода,

def home(request):
    return render(request,"index.html",{})

в views.py. это отлично работает для django 1.11

Ответ 6

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

Ответ 7

Я понял, что TEMPLATE_DIRS требует абсолютного пути. И мне не нравятся абсолютные пути в моем коде. Так что это хорошо работает для меня, в settings.py:

import os

TEMPLATE_DIRS = (
    os.path.join(os.path.dirname(os.path.realpath(__file__)),
                 "../APPNAME/templates")
)

Ответ 8

Предыдущее решение не работало в моем случае. Я использовал:

TEMPLATE_DIRS = [ os.path.join(os.path.dirname(os.path.realpath(__file__)),"../myapp/templates") ]

Ответ 9

Django 1.10

TEMPLATE_DIRS устарел.

Теперь нам нужно использовать TEMPLATE, в Django 1.8 следующим образом:

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [],
        'APP_DIRS': True,
        'OPTIONS': {
            # ... some options here ...
        },
    },
]

Как только вы определили ШАБЛОНЫ, вы можете безопасно удалить ALLOWED_INCLUDE_ROOTS, TEMPLATE_CONTEXT_PROCESSORS, TEMPLATE_DEBUG, TEMPLATE_DIRS, TEMPLATE_LOADERS и TEMPLATE_STRING_IF_INVALID.

О лучшем месте, Django ищет шаблон, подобный этому:

  • DIRS определяет список каталогов, в которых движок должен искать исходные файлы шаблонов в порядке поиска.
  • APP_DIRS сообщает, должен ли движок искать шаблоны внутри установленных приложений. Каждый backend определяет обычное имя для подкаталога внутри приложений, где его шаблоны должны храниться.

Дополнительная информация: https://docs.djangoproject.com/en/1.10/topics/templates/#configuration