1463: Этап №5: Рассылка - Прехеадер и Тема письма

remotes/origin/stage5
Alexander Burdeiny 10 years ago
parent d7b0973ca3
commit c2e3b5b551
  1. 23
      emencia/django/newsletter/mailer.py
  2. 3
      fabfile.py
  3. 7
      templates/admin/newsletters/newsletter_object.html

@ -12,6 +12,8 @@ from StringIO import StringIO
from datetime import datetime from datetime import datetime
from datetime import timedelta from datetime import timedelta
from smtplib import SMTPRecipientsRefused from smtplib import SMTPRecipientsRefused
from pymorphy2 import MorphAnalyzer
morph = MorphAnalyzer()
try: try:
from email.mime.multipart import MIMEMultipart from email.mime.multipart import MIMEMultipart
@ -307,16 +309,27 @@ class NewsLetterSender(object):
# include preheader # include preheader
if self.newsletter.preheader: if self.newsletter.preheader:
preheader_ctx = { preheader = self.newsletter.preheader.format(**self.build_preheader_ctx(contact))
'name': contact.first_name or contact.last_name,
'subscribe_themes': ', '.join([self.themes.get(x) for x in contact.contactsettings.theme.all().values_list('pk', flat=True)]),
}
preheader = self.newsletter.preheader.format(**preheader_ctx)
preheader_html = render_to_string('newsletter/newsletter_preheader.html', {'preheader': preheader}) preheader_html = render_to_string('newsletter/newsletter_preheader.html', {'preheader': preheader})
content = body_insertion(content, preheader_html) content = body_insertion(content, preheader_html)
return smart_unicode(content) return smart_unicode(content)
def build_preheader_ctx(self, contact):
t_add = ''
count = contact.contactsettings.theme.count()
if count > 3:
count -= 3
theme_word = morph.parse(u'тема')[0]
t_add = _(u' и еще {count} {theme_word}').format(
count=count,
theme_word=theme_word.t.make_agree_with_number(count).word,
)
return {
'name': contact.first_name or contact.last_name,
'themes': ', '.join([self.themes.get(x) for x in contact.contactsettings.theme.all().values_list('pk', flat=True)[:3]]) + t_add,
}
def update_newsletter_status(self): def update_newsletter_status(self):
"""Update the status of the newsletter""" """Update the status of the newsletter"""
if self.test: if self.test:

3
fabfile.py vendored

@ -159,6 +159,8 @@ def t1456():
def t1463(): def t1463():
with cd(REMOTE_HOME_DIR): with cd(REMOTE_HOME_DIR):
run('python manage.py migrate newsletter') run('python manage.py migrate newsletter')
run('pip install pymorphy2[fast]')
run('pip install -U pymorphy2-dicts-ru')
@stage(5) @stage(5)
@ -173,6 +175,7 @@ def update_crontab():
run('python manage.py crontab remove') run('python manage.py crontab remove')
run('python manage.py crontab add') run('python manage.py crontab add')
# def stage3_pre_final(): # def stage3_pre_final():
# with cd(REMOTE_HOME_DIR): # with cd(REMOTE_HOME_DIR):
# run('pip install pandas') # run('pip install pandas')

@ -60,6 +60,13 @@
<div class="box-header well"> <div class="box-header well">
<h2><i class="icon-pencil"></i>{% if object %}{% trans "Изменения" %}{% else %}{% trans "Создание" %}{% endif %} {% trans "рассылки" %}</h2> <h2><i class="icon-pencil"></i>{% if object %}{% trans "Изменения" %}{% else %}{% trans "Создание" %}{% endif %} {% trans "рассылки" %}</h2>
</div> </div>
<div class="box-content">
<i class="icon-info-sign"></i>{% trans "Доступные параметры для прехедера" %}:
<p>{% trans "{name} - имя пользователя" %}</p>
<p>{% trans "{themes} - темы на которые пользователь подписан (первые 3 + кол-во оставшихся)" %}</p>
</div>
<div class="box-content"> <div class="box-content">
{% for field in form %} {% for field in form %}
<div class="control-group {% if field.errors %}error{% endif %}"> <div class="control-group {% if field.errors %}error{% endif %}">

Loading…
Cancel
Save