我正在将Django中的一个旧项目从1.3版升级到1.9版。 我可以管理一些错误并进行修改,但现在我陷入了一个我不理解的错误。在
以下是错误日志:
Performing system checks...
/home/norore/.virtualenvs/jebifdjango/local/lib/python2.7/site-packages/django/template/utils.py:37: RemovedInDjango110Warning: You haven't defined a TEMPLATES setting. You must do so before upgrading to Django 1.10. Otherwise Django will be unable to load templates.
"unable to load templates.", RemovedInDjango110Warning)
Unhandled exception in thread started by <function wrapper at 0x7fee03cfb848>
Traceback (most recent call last):
File "/home/norore/.virtualenvs/jebifdjango/local/lib/python2.7/site-packages/django/utils/autoreload.py", line 226, in wrapper
fn(*args, **kwargs)
File "/home/norore/.virtualenvs/jebifdjango/local/lib/python2.7/site-packages/django/core/management/commands/runserver.py", line 116, in inner_run
self.check(display_num_errors=True)
File "/home/norore/.virtualenvs/jebifdjango/local/lib/python2.7/site-packages/django/core/management/base.py", line 426, in check
include_deployment_checks=include_deployment_checks,
File "/home/norore/.virtualenvs/jebifdjango/local/lib/python2.7/site-packages/django/core/checks/registry.py", line 75, in run_checks
new_errors = check(app_configs=app_configs)
File "/home/norore/.virtualenvs/jebifdjango/local/lib/python2.7/site-packages/django/core/checks/urls.py", line 10, in check_url_config
return check_resolver(resolver)
File "/home/norore/.virtualenvs/jebifdjango/local/lib/python2.7/site-packages/django/core/checks/urls.py", line 19, in check_resolver
for pattern in resolver.url_patterns:
File "/home/norore/.virtualenvs/jebifdjango/local/lib/python2.7/site-packages/django/utils/functional.py", line 33, in __get__
res = instance.__dict__[self.name] = self.func(instance)
File "/home/norore/.virtualenvs/jebifdjango/local/lib/python2.7/site-packages/django/core/urlresolvers.py", line 417, in url_patterns
patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module)
File "/home/norore/.virtualenvs/jebifdjango/local/lib/python2.7/site-packages/django/utils/functional.py", line 33, in __get__
res = instance.__dict__[self.name] = self.func(instance)
File "/home/norore/.virtualenvs/jebifdjango/local/lib/python2.7/site-packages/django/core/urlresolvers.py", line 410, in urlconf_module
return import_module(self.urlconf_name)
File "/usr/lib/python2.7/importlib/__init__.py", line 37, in import_module
__import__(name)
File "/home/norore/programmation/jebifdjango/jebif-root/jebif/urls.py", line 22, in <module>
(r'^election/', include('election.urls')),
File "/home/norore/.virtualenvs/jebifdjango/local/lib/python2.7/site-packages/django/conf/urls/__init__.py", line 52, in include
urlconf_module = import_module(urlconf_module)
File "/usr/lib/python2.7/importlib/__init__.py", line 37, in import_module
__import__(name)
File "/home/norore/programmation/jebifdjango/jebif-root/election/urls.py", line 5, in <module>
from election.views import *
File "/home/norore/programmation/jebifdjango/jebif-root/election/views.py", line 3, in <module>
from django.core.mail import *
TypeError: Item in ``from list'' not a string
所以,我检查了选举结果/网址.py模块和我没有看到什么问题。以下是源代码:
^{pr2}$我也检查了选举结果/视图.py模块:
(很难直接在StackOverflow上读取?以下是我的GitHub帐户的源代码:https://github.com/Norore/jebif-election/blob/master/views.py)
# -*- coding: utf-8
from django.core.mail import *
from django.shortcuts import *
from django import forms
from django.core.exceptions import ValidationError
from django.contrib.auth.decorators import user_passes_test
from django.contrib.sites.models import Site
from jebif import settings
import election.models as election
import datetime
import operator
def vote( request, election_id ) :
el = election.Election.objects.get(id=election_id)
if not el.opened :
return render(request, "election/vote-closed.html")
candidate_choices = [(c.id, c.label) for c in el.candidate.all()]
def validate_candidates( value ) :
if len(value) < el.min_choices :
raise ValidationError(u"Sélectionnez au moins %d candidat(s)." % el.min_choices)
if len(value) > el.max_choices :
raise ValidationError(u"Sélectionnez au plus %d candidat(s)." % el.max_choices)
def validate_passwd( value ) :
if len(value) != 32 :
raise ValidationError(u"Clef de vote invaide.")
try :
v = el.voter.get(passwd=value)
if v.hasvoted :
raise ValidationError(u"Clef de vote déjà utilisée.")
except election.Voter.DoesNotExist :
raise ValidationError(u"Clef de vote inconnue.")
class VoteForm( forms.Form ) :
voteA = forms.ChoiceField(label=u"Vote A : %s" % el.voteA_label, # Bilan moral - \"Approuvez vous le bilan moral de l'association ?\"",
choices=election.Vote._meta.get_field("voteA").choices,
widget=forms.RadioSelect)
if el.voteB_label :
voteB = forms.ChoiceField(label=u"Vote B : %s" % el.voteB_label, # Bilan financier - \"Approuvez vous le bilan financier de l'association ?\"",
choices=election.Vote._meta.get_field("voteB").choices,
widget=forms.RadioSelect)
if el.max_choices > 0 :
candidates = forms.MultipleChoiceField(label=u"Vote C : Renouvellement du Conseil d'Administration - "
+ u"\"Voulez-vous que la personne suivante fasse partie du Conseil d'Administration ?\""
+ ((u" (%d maximum)" % el.max_choices) if el.max_choices < el.candidate.count()
else u" (sélectionnez tous les candidats que vous souhaitez voir élus)"),
required=False,
choices=candidate_choices,
widget=forms.CheckboxSelectMultiple,
validators=[validate_candidates])
passwd = forms.CharField(label=u"Clef du vote",
max_length=32, min_length=32,
validators=[validate_passwd])
if request.method == 'POST' :
form = VoteForm(request.POST)
if form.is_valid() :
d = form.cleaned_data
trace = "%s %s(%s)" % (datetime.datetime.now(), request.META.get("REMOTE_HOST"),
request.META.get("REMOTE_ADDR"))
voter = el.voter.get(passwd=d["passwd"])
vote = election.Vote(election=el)
vote.trace = trace
vote.voteA = d["voteA"]
vote.voteB = d["voteB"] if "voteB" in d else 0
vote.save()
vote.choices = d["candidates"] if "candidates" in d else []
voter.hasvoted = True
voter.trace = trace
vote.save()
voter.save()
return HttpResponseRedirect("ok/")
else :
form = VoteForm()
context = { "election": el,
"form": form,
}
return render(request, "election/vote.html", context)
def is_admin() :
def validate( u ) :
return u.is_authenticated() and u.is_staff
return user_passes_test(validate)
@is_admin()
def results( request, election_id ) :
el = election.Election.objects.get(id=election_id)
nb_voters = el.voter.count()
total = el.vote_set.count()
participation = (100.*total)/nb_voters
def make_pc( e, t ) :
if t > 0 :
e["pc"] = (100.*e["nb"])/t
else :
e["pc"] = 0.
def make_votes( r ) :
get_nb = operator.itemgetter("nb")
r.sort(key=get_nb, reverse=True)
t = sum(map(get_nb, r))
for e in r :
make_pc(e,t)
return t
def make_abstained( e ) :
make_pc(e, total)
def tristate_result( field ) :
r = []
a = None
for (val, label) in election.Vote._meta.get_field(field).choices :
d = {"value": val, "label": label, "nb": el.vote_set.filter(**{field: val}).count()}
if val != 0 :
r.append(d)
else :
a = d
make_votes(r)
make_abstained(a)
return {"votes": r, "abstained": a}
aC_nb = el.vote_set.exclude(choices__in=el.candidate.all()).count()
aC = {"nb": aC_nb}
make_abstained(aC)
base = total - aC_nb
rC = []
for c in el.candidate.all() :
nb = c.vote_set.count()
rC.append({"candidate" : c, "pc": (100.*nb)/base, "nb": nb })
rC.sort(key=operator.itemgetter("pc"), reverse=True)
results = {
"voteA" : tristate_result("voteA"),
"voteB" : tristate_result("voteB"),
"voteC" : {"votes": rC, "abstained": aC}
}
context = { "election": el,
"nb_voters": nb_voters,
"participation": participation,
"total": total,
"results": results,
}
return render(request, "election/results.html", context)
@is_admin()
def mailing( request, election_id ) :
el = election.Election.objects.get(id=election_id)
def validate_template( value ) :
if not "%ELECTION_PASSWD%" in value or not "%ELECTION_URL%" in value :
raise ValidationError(u"Macros %ELECTION_URL% ou %ELECTION_PASSWD non présentes")
class MailingForm( forms.Form ) :
email_to = forms.ChoiceField(label=u"Destinataires", choices=[
("hasnotvoted", u"Seuls les inscrits n'ayant pas voté"),
("allvoters", u"Tous les inscrits au vote"),])
email_from = forms.EmailField(label=u"Expéditeur", initial="iscb.rsg.france@gmail.com")
email_subject = forms.CharField(label=u"Sujet", initial="[JeBiF] ")
email_template = forms.CharField(label=u"Modèle du message",
widget=forms.Textarea(attrs={'cols': 90, 'rows': 30}),
help_text="Utiliser les macros %ELECTION_URL% et %ELECTION_PASSWD%. Optionnellement: %VOTER_FIRSTNAME%.",
validators=[validate_template])
attachment1 = forms.FileField(label=u"Attachement 1", required=False)
attachment2 = forms.FileField(label=u"Attachement 2", required=False)
def template_instance(tmpl, voter) :
ELECTION_URL = "http://%s%s" % (Site.objects.get_current().domain, el.get_absolute_url())
return tmpl.replace("%ELECTION_URL%", ELECTION_URL).replace(
"%ELECTION_PASSWD%", voter.passwd).replace(
"%VOTER_FIRSTNAME%", voter.member.firstname)
message = None
mode = "init"
voters = None
if request.method == "POST" :
form = MailingForm(request.POST, request.FILES)
if form.is_valid() :
d = form.cleaned_data
message = {
"from": d["email_from"],
"subject": d["email_subject"],
"attachment1" : d["attachment1"],
"attachment2" : d["attachment2"],
}
if d["email_to"] == "hasnotvoted":
voters = el.voter.filter(hasvoted=False)
else :
voters = el.voter.all()
if "do_it" in request.POST :
def prep_attach( uf ) :
if uf :
return { "name": uf.name, "data": uf.read(), "content_type": uf.content_type }
message["attachment1"] = prep_attach(message["attachment1"])
message["attachment2"] = prep_attach(message["attachment2"])
for voter in voters :
msg_txt = template_instance(d["email_template"], voter)
email = EmailMessage(message["subject"], msg_txt, message["from"],
[voter.member.email])
def attach( uf ) :
if uf :
email.attach(uf["name"], uf["data"], uf["content_type"])
attach(message["attachment1"])
attach(message["attachment2"])
email.send()
context = { "election": el,
"voters": voters,
}
return render(request, "election/mailing-ok.html", context)
else :
mode = "preview"
class member :
firstname = u"Loïc"
m = member()
class voter :
passwd = "PASSWD_TEST"
member = m
message["preview"] = template_instance(d["email_template"], voter())
else :
form = MailingForm()
context = { "election": el,
"voters": voters,
"form": form,
"mode": mode,
"message": message,
}
return render(request, "election/mailing-form.html", context)
如果我记得很清楚的话,我检查了上面提到的代码行,但是很明显它们并没有从django1.3中改变。在
你们谁知道问题出在哪里吗?我知道这将是一个很长的任务来做升级,但我们真的需要升级我们的应用程序!
我也开放所有好的建议,你可以与我分享做这个升级!在
提前谢谢。在
将导入更改为:
将您的
^{pr2}$urlpatterns
更改为:相关问题 更多 >
编程相关推荐