我的django应用程序中的一个模块中的类在使用super ...
构建自身时遇到了问题class LinkshareExternalAffiliateProperties(AffiliateExternalProperties):
def __init__(self, aggregator_affiliate_id, account_username, account_password, api_token):
super(LinkshareExternalAffiliateProperties, self).__init__(aggregator_affiliate_id)
self.account_username = account_username
self.account_password = account_password
self.api_token = api_token
class AffiliateExternalProperties(object):
def __getattribute__(self, attr):
sources = super(AffiliateExternalProperties, self).__getattribute__('__sources__')
if attr in sources:
return self.get(attr)
else:
return super(AffiliateExternalProperties, self).__getattribute__(attr)
当调用代码时,我得到一个错误:super()参数1必须是type,而不是None LinkshareExternalAffiliateProperties如何在此处评估为无?它是这个新实例的类!目前,同一模块中的其他类也不可用。
一些有趣的事情(这整个事情令人费解,但整个故事的某些部分可能是造成问题的原因......):
class Aggregator(models.Model):
foo = columns
@property
def proxy(self):
if self.name == 'Linkshare':
return Linkshare.objects.get_instance()
elif self.name == 'Commission Junction':
return CommissionJunction.objects.get_instance()
elif self.name == 'Share-A-Sale':
return ShareASale.objects.get_instance()
else:
raise Exception('Invalid aggregator name "%s". Excpected Linkshare, Commission Junction, or Share-A-Sale.' % self.name)
class Linkshare(models.Model):
def affiliate_properties(self, aggregator_affiliate_id):
return LinkshareExternalAffiliateProperties(aggregator_affiliate_id, self.username, self.password)
class Affiliate(models.Model):
foo = columns
def get_external_properties():
return self.aggregator.proxy.get_external_properties(self.aggregator_affiliate_id)
class MyView(self):
def view(self, request):
affiliate = get_object_or_404(Affiliate, pk=id)
properties = affiliate.get_external_properties()
return render_to_response('admin/affiliates/affiliate/affiliate_scrape_ajax.html', dict(scrape=properties))
在浏览器中点击/查看会引发错误...
踢球者,运行此代码当然它可以很好地完成错误。
当我使用gunicorn& amp; nginx,它搞砸了。
答案 0 :(得分:0)
在声明之后检查您是否未分配课程。以下将导致您看到的错误:
class foo(object):
def x(self):
print "foo"
class bar(foo):
def x(self):
super(bar, self).x()
baz = bar
bar = None
a = baz()
a.x()
答案 1 :(得分:0)
Gunicorn有一个错误:
django run_gunicorn
+重新加载
使用Django'un_gunicorn'命令修复重载的一种可能性 manage.py会考虑重新加载== reexec。所以我们正在制作 确定我们重新加载所有模块。但是使用此解决方案,进程ID将会 如果他们改变了,一些主管可能无法检测到变化 没有使用pidfile。 (换句话说,我们应该强烈建议 如果他们想要HUP支持,人们可以使用gunicorn_django命令。)