在我的项目中,我添加了一个简报源.但是在尝试使用此功能发送电子邮件时:
def send(request):
template_html = 'static/newsletter.html'
template_text = 'static/newsletter.txt'
newsletters = Newsletter.objects.filter(sent=False)
subject = _(u"Newsletter")
adr = NewsletterEmails.objects.all()
for a in adr:
for n in newsletters:
to = a.email
from_email = settings.DEFAULT_FROM_EMAIL
subject = _(u"Newsletter Fandrive")
text = get_template(template_text)
html = get_template(template_html)
d = { 'n': n,'email': to }
text_content = text.render(d)
html_content = html.render(d)
msg = EmailMultiAlternatives(subject, text_content, from_email, [to])
msg.attach_alternative(html_content, "text/html")
msg.send()
Run Code Online (Sandbox Code Playgroud)
使用这些模板:
//text
=================== Newsletter - {{ n.date }} ============
==========================================================
{{ n.title }}
==========================================================
{{ n.text …Run Code Online (Sandbox Code Playgroud) 我需要创建一个每天从crontab发送新闻通讯的功能.我在互联网上找到了两种方法:
第一个 - 放在django项目文件夹中的文件:
#! /usr/bin/env python
import sys
import os
from django.core.management import setup_environ
import settings
setup_environ(settings)
from django.core.mail import send_mail
from project.newsletter.models import Newsletter, Address
def main(argv=None):
if argv is None:
argv = sys.argv
newsletters = Newsletter.objects.filter(sent=False)
message = 'Your newsletter.'
adr = Address.objects.all()
for a in adr:
for n in newsletters:
send_mail('System report',message, a ,['user@example.com'])
if __name__ == '__main__':
main()
Run Code Online (Sandbox Code Playgroud)
我不确定它是否会起作用,我不知道如何运行它.假设它叫做run.py,那么我应该在cron中调用它0 0 * * * python /path/to/project/run.py
吗?
第二个解决方案 - 在任何地方创建我的发送函数(就像普通的django函数一样),然后创建一个run.py脚本:
import sys
import os
os.environ['DJANGO_SETTINGS_MODULE'] …Run Code Online (Sandbox Code Playgroud) 我在stackoverflow上找到了一个使用信号扩展django-registration和新字段的解决方案.这是链接:http://dmitko.ru/?p = 546.
我创建了扩展配置文件模型,扩展形式,为设置添加了必需的选项,定义了URL并显示了正确的表单,但只创建了普通用户(来自auth模块).为什么会这样?
account.models:
from django.db import models
from django.contrib.auth.models import User
from registration.signals import user_registered
import hashlib
class InheritedProfile(models.Model):
first_name = models.CharField("Name", max_length=50, blank=True, null=True)
last_name = models.CharField("Last name", max_length=50, blank=True, null=True)
pid = models.CharField("PESEL", max_length=11, blank=True, null=True)
street = models.CharField("Street", max_length=50, blank=True, null=True)
number = models.CharField("Flat/house number", max_length=10, blank=True, null=True)
code = models.CharField("Zip ", max_length=6, blank=True, null=True)
city = models.CharField("City", max_length=50, blank=True, null=True)
class Meta:
abstract=True
class UserProfile(InheritedProfile, User):
def upload_path(self, field_attname):
filename …Run Code Online (Sandbox Code Playgroud) 假设我有一个用于添加/编辑产品的表单(字段'user'是我的用户的外键),它是从两个单独的视图函数触发的 - 添加/编辑:
def product_add(request):
userprofile = UserProfile.objects.get(user=request.user)
if request.method == 'POST':
form = ProductAddForm(request.POST, request.FILES,)
if form.is_valid():
form.save(user=request.user)
else:
form = ProductAddForm()
return render_to_response('products/product_add.html', {
'form':form, 'user':request.user,
}, context_instance=RequestContext(request))
def product_edit(request, id):
product = get_object_or_404(Product, id=id, user=request.user)
if product.user.id!=request.user.id:
raise Http404
if request.method == 'POST':
form = ProductAddForm(request.POST, request.FILES, instance=product)
if form.is_valid():
form.save(user=request.user)
else:
form = ProductAddForm(instance=product)
return render_to_response('products/product_edit.html', {
'form':form, 'user':request.user,
}, context_instance=RequestContext(request))
Run Code Online (Sandbox Code Playgroud)
表单的save方法如下所示:
def save(self, user, *args, **kwargs):
self.instance.user = user
post = super(ProductAddForm, self).save(*args, **kwargs)
post.save() …Run Code Online (Sandbox Code Playgroud) 在我的主页面中,我添加了一个模板,其中包含用于向电子报添加电子邮件的表单.我希望这个表单能够添加新的电子邮件,而无需在任何地方重定向.我怎么能做到这一点?这是我的代码,当我使用单独的页面时:
观点:
def newsletter_add(request):
if request.POST:
f = NewsletterForm(request.POST)
if f.is_valid():
try:
e = NewsletterEmails.objects.get(email = request.POST['email'])
msg = u'Mail already added'
return render_to_response('newsletter/add.html',
{'form':f,'msg':msg,},RequestContext(request))
except Address.DoesNotExist:
e = NewsletterEmails(email = request.POST['email'])
e.save()
msg = u'Mail added'
return HttpResponseRedirect('/')
else:
f = NewsletterForm()
return render_to_response('newsletter/add.html',{'form':f,},RequestContext(request))
Run Code Online (Sandbox Code Playgroud)
形式:
{% block content %}
<div class="center-right">
<div class="pane profile">
<div class="div-content">
{{ msg }}
<form action="" method="post" enctype="multipart/form-data">
{{form.as_p}}
<input type="submit" class="submit" name="submit" value="Ok" />
</form>
</div>
</div>
</div>
{% endblock %}
Run Code Online (Sandbox Code Playgroud)
形式 : …
django ×5
python ×2
cron ×1
crontab ×1
django-forms ×1
html ×1
html-email ×1
redirect ×1
super ×1