sin*_*inθ 3 python django decorator
这是我的视图代码:
@login_required
def get_top(type):
o = Work.objects.filter(types = "Fan Fiction").order_by("-date_updated")[:10]
list = []
for o in o:
l.title = o.title
l.href = "/" + o.id
list.append(l)
return l
@login_required
def main_home(request):
fanfiction = get_top("ff")
poetry = get_top("pw")
originalwork = get_top("ow")
return render_to_response("Main/main_home.html", {'STATIC_URL':STATIC_URL, "poetry":poetry, "fan":fanfiction, "original":originalwork})
Run Code Online (Sandbox Code Playgroud)
这是模型的代码:
class Work(models.Model):
title = models.CharField(max_length=30)
summery = models.TextField()
user = models.ForeignKey(User)
date_published = models.DateField()
date_updated = models.DateField()
one_shot = models.BooleanField()
completed = models.BooleanField()
TYPES = (
('FF', 'Fan Fiction'),
('OF', 'Original Work'),
('PW', 'Poetry Work'),
)
types = models.CharField(max_length=2, choices=TYPES)
fandom1 = models.ForeignKey(Book, blank = True, null= True, related_name='f_1')
fandom2 = models.ForeignKey(Book, blank = True, null= True, related_name='f_2')
def __unicode__(self):
return self.title + '-' + self.user.email
Run Code Online (Sandbox Code Playgroud)
这是错误:'str' object has no attribute 'user'在"get_top("ff")"
Sri*_*aju 10
请删除@login_required装饰器的get_top方法.
这样做的目的是@login_required尝试验证该用户是否已登录.这是试图找到一个User对象实例中ff这是str因此堆栈跟踪.通常从obj @login_required获取,但因为你没有传递它因此错误.Userrequestget_top
我的建议是你应该维护一些方法,views.py这些方法与其中urls.py一些可能需要的API网址相关联@login_required.其他方法集是辅助方法(如get_top).这些不会暴露在外面的世界(因此没有必要@login_required).
如果您必须get_top在内部和外部公开,那么您的第一个参数get_top必须是request对象,然后是其他参数.
| 归档时间: |
|
| 查看次数: |
2464 次 |
| 最近记录: |