Django / python:'function'对象没有属性'as_view'

时间:2016-08-02 15:16:35

标签: django django-views django-urls django-generic-views

我正在尝试为模型查询集创建list_view。运行我的服务器时,它返回:属性错误 - 'function'对象没有属性'as_view'。我很感激帮助我解决这个问题。

这是我的代码:

Views.py:

 url(r'^live_bids/$', live_bids.as_view()),

urls.py:

override func viewWillAppear(animated: Bool) {
    let size: CGSize = UIScreen.mainScreen().bounds.size
    if size.width / size.height > 1 {
        print("landscape")
    } else {
        print("portrait")
    }
}
override func viewWillTransitionToSize(size: CGSize, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator) {
    if size.width / size.height > 1 {
        print("landscape")
    } else {
        print("portrait")
    }
}

1 个答案:

答案 0 :(得分:25)

您不能在类似的类上使用login_required装饰器。您需要使用method_decorator。在Django 1.9+上,你可以装饰这个类:

from django.contrib.auth.decorators import login_required
from django.utils.decorators import method_decorator

@method_decorator(login_required, name='dispatch')
class LiveBids(LoginRequiredMixin, ListView):
    ...

在早期版本中,您需要覆盖dispatch并在那里使用method_decorator

class LiveBids(LoginRequiredMixin, ListView):
    @method_decorator(login_required)
    def dispatch(self, *args, **kwargs):
        return super(LiveBids, self).dispatch(*args, **kwargs)

最简单的解决方案是使用LoginRequiredMixin而不是装饰器(适用于Django 1.9 +)

from django.contrib.auth.mixins import LoginRequiredMixin

class LiveBids(LoginRequiredMixin, ListView):
    model = Post 
    template_name = 'loggedin_load/live_bids.html'

    def get_queryset(self):
        return Post.objects.all().prefetch_related('bids').filter(user=self.request.user)

请注意,在示例中,我已将视图重命名为LiveBids,以匹配推荐的Django样式。您还必须更新网址格式。