Какое место лучше всего разместить в проекте 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