/ django

Лучшие практики Django

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

Струкура настроек проекта

Я обычно храню все основные настройки в файле settings.py и в него импортирую файл local_settings.py, также файл settings.py хранится в git, а local_settings.py делается для каждого окружения свой, но в git хранится local_settings.py.example который содержит структуру файла и то что можно в нем менять или добавить.

Импорт в settings.py:

try:
    from settings_local import *
except ImportError:
    pass

Примерное содержимое файла local_settings.py.example:

import os

DEBUG = True
TEMPLATE_DEBUG = DEBUG

ADMINS = (
('You', 'your@email'),
)
MANAGERS = ADMINS

DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(os.path.realpath(file), 'dev.db'),
}
}
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.dummy.DummyCache',
}
}

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

project #директория проекта
- prjct #директория основного приложения
- - settings.py
- - local_settings.py.example
- - local_settings.py 
- - …
- manage.py

При переносе приложения на другой сервер, либо при открытии проекта другим разарботкичом требуется лишь переименовать local_settings.py.example в local_settings.py и внести нужные настройки.

Использование путей к файлам.

В настройках django нужно указывать пути до директорий в которых хранятся статические файлы, наблоны, файлы локализации и тд. Для этого не нужно писать полный путь, а лучше поручить все это python. Я для этого использую данный прием:

import os 

PROJECT_DIR = os.path.dirname(os.path.realpath(file))

def p(*args):
return os.path.join(PROJECT_DIR, '..', *args)

В теперь путь функция p будет указывать на корень проекта, и использовать ее нужно вот так:

STATIC_ROOT = p('static’) 

Для статических файлов будет определена директория static в корне проекта.

Статические файлы в шаблоне.

Для определения путей к статическим файлам я использую приложение staticfiles (django.contrib.staticfiles), его нужно добавить к списку INSTALLED_APPS:

INSTALLED_APPS = [
….
 ‘django.contrib.staticfiles’,
….
]

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

{% load static %}

<img src="{% static «images/test.jpg" %}" />

Работа с шаблонами.

Самый лучший и однозначный способ именования шаблонов это использование такой конструкции:

[приложение] / [модель] _ [функция]. HTML 

Функции:

  • list - для вывода списков
  • detail - для детальное отображения
  • form - для вывода формы

А все части шаблона нужно складывать в директорию includes

Я указал лишь основы, в будущем скорей всего продолжу тему хороших практик при создании django приложения