Прием neato с groupby к кодированию по длинам серий в одной строке:
[(c,len(list(cgen))) for c,cgen in groupby(some_string)]
даст Вам список 2 кортежей, где первый элемент является символом, и 2-м является количество повторений.
Редактирование: Обратите внимание, что это - то, что отделяется itertools.groupby
от семантики SQL GROUP BY
: itertools не делает (и в целом не может) сортировать итератор заранее, таким образом, группы с тем же "ключом" не объединяются.
Может быть, а может и нет. Было бы не так уж сложно иметь приложение, которое имеет связь «многие ко многим» между информационным бюллетенем (как бы это ни представлялось) и подписчиком (внешний ключ пользователя или firstName / lastName / emailAddress / password).
Ваши модели будут примерно такими:
from django.db import models
from django.contrib.auth.models import User
class Subscriber(models.Model):
user = models.ForeignKey(User)
email = models.EmailField()
def __unicode__(self):
return "User %s" % (self.user.username, )
@models.permalink
def get_absolute_url(self):
return ('subscriber', None, {'object_id' : self.id})
class Meta:
ordering = [ "id" ]
class Newsletter(models.Model):
name = models.CharField(max_length=80)
subscribers = models.ManyToManyField('Subscriber')
# .... Other stuff
def __unicode__(self):
return "Newsletter %s" % (self.name, )
@models.permalink
def get_absolute_url(self):
return ('newsletter', None, {'object_id' : self.id})
class Meta:
ordering = [ "id" ]
Ваш urls.py будет выглядеть примерно так:
from django.conf.urls.defaults import *
from django.views.generic.simple import direct_to_template
urlpatterns = patterns('',
url(r'^subscriber/(?P<object_id>\d+)/$', views.subscriberview, name='subscriber_view'),
url(r'^newsletter/(?P<object_id>\d+)/$'', views.newsletterview,name='newsletter_view'),
url(r'^site_media/(?P<path>.*)$', 'django.views.static.serve', {'document_root': MEDIA_ROOT}),
)
Этого достаточно, чтобы вы начали?
Попробуйте djangolist
DjangoList - это приложение django, которое позволяют делать массовые рассылки и управлять информационный бюллетень, из которого пользователи могут подписаться / отказаться от подписки. DjangoList - это в настоящее время в разработке и не готов к использованию.
вы должны взглянуть на этот проект https://github.com/emencia/emencia-django-newsletter
Я решил создать собственное решение для сборки текста и обработки подписок, но думаю, что буду использовать django -mailer , чтобы отслеживать, что было отправлено и как это закончилось.