import operator
import functools
from django.db.models import Q
from .models import Item
def get_items(letters=''):
items = Item.objects.filter(active=True)
items = items.exclude(id__lt=100).exclude(id__gt=200)
if letters:
q = functools.reduce(operator.or_, (Q(name__istartswith=l) for l in letters))
items = items.filter(q)
return items
get_items('abc')
from django.db.models import Q
from .models import Item
def get_items(letters='', active=None):
q = Q()
if len(letters) == 3 and letters[1] == '-':
letters = (unichr(c) for c in range(ord(letters[0]), ord(letters[2]) + 1))
for letter in letters:
q |= Q(name__istartswith=letter)
if active is not None:
q &= Q(active=active)
return Item.objects.filter(q)
get_items(u'абвгд')
get_items(u'в-д')
get_items(u'а-я', True)
letters = 'абвгд'
Model.objects.filter(reduce(
lambda x,y: (isinstance(x, Q) and x or Q(name__istartswith=x)) | Q(name__istartswith=y),
letters
))
# Или
from operator import or_
Model.objects.filter(
reduce(or_, (Q(name__istartswith=l) for l in letters))
)
def chunks(l, n):
for i in range(0, len(l), n):
yield l[i:i + n]
#Считываем, убираем дубликаты, сортируем
names = sorted({line.strip() for line in open('users.txt', encoding='utf-8')})
#Разбиваем на примерно равные части и генерируем словарь,
#ключом которого служат первая буква первой и последней фамилии в списке.
catalog = {'{}-{}'.format(item[0][0], item[-1][0]):item for item in chunks(names, 100)}
from itertools import groupby
from operator import itemgetter
# Разбиваем на группы по первой букве
def chunks(items):
for letter, names in groupby(sorted(items), key=itemgetter(0)):
yield list(names)
# Сливаем вместе группы меньше min_len в группы не больше max_len
def reshape(items, min_len, max_len):
buffer = []
for item in items:
if len(buffer) >= max_len:
yield sorted(buffer)
buffer = []
if len(item) <= min_len:
buffer += item
else:
yield item
yield sorted(buffer)
#Считываем и сортируем
names = sorted(line.strip() for line in open('users.txt', encoding='utf-8'))
#Разбиваем на примерно равные части
groups_list = reshape(chunks(names), 50, 100)
#генерируем словарь ключом которого служат первая буква первой и последней фамилии в списке
catalog = {'{}-{}'.format(item[0][0], item[-1][0]):item for item in groups_list}
class ReactorCreateView(PermissionRequiredMixin, CreateView):
permission = 'myapp.create_reactor'
model = AtomicReactor
А что с главной страницей?создай апп с названием core || common || main || etc и сделай там вью со своей главной
Т.е. сама основа на которой хедер, футер и в нее уже контент этих приложений вставляется.основа верстки ложится в темплейт, основа контекста, может ложится в core
Ее что отдельным приложением сделать?если какая-то часть задачи сильно отличается от дргуих - ее можно вынести в апп