29👍
def TestView(View):
should be class TestView(View):
. As it stands, you define a function called TestView
which takes an argument called View
— its body defines an inner function, then returns None
.
68👍
Since this is the #1 hit on google for this error message and there’s a more subtle and probably common cause for it than the OPs, I’m posting this comment here.
This error can also be caused by using a standard view decorator on a class based view instead of on the __dispatch__
method within the view.
- [Django]-Difference between auto_now and auto_now_add
- [Django]-How to render Django forms.ChoiceField as Twitter Bootstrap dropdown
- [Django]-Django Admin filter on Foreign Key property
29👍
To add to Tim Saylor point,
https://docs.djangoproject.com/en/dev/topics/class-based-views/intro/#id1
To decorate every instance of a class-based view, you need to decorate
the class definition itself. To do this you apply the decorator to the
dispatch() method of the class.A method on a class isn’t quite the same as a standalone function, so
you can’t just apply a function decorator to the method – you need to
transform it into a method decorator first. The method_decorator
decorator transforms a function decorator into a method decorator so
that it can be used on an instance method. For example:
from django.contrib.auth.decorators import login_required
from django.utils.decorators import method_decorator
from django.views.generic import TemplateView
class ProtectedView(TemplateView):
template_name = 'secret.html'
@method_decorator(login_required)
def dispatch(self, *args, **kwargs):
return super(ProtectedView, self).dispatch(*args, **kwargs)
- [Django]-How to process a form (via get or post) using class-based views?
- [Django]-Secret API key for accessing Django REST framework
- [Django]-How To Run Arbitrary Code After Django is "Fully Loaded"
9👍
I am also getting this error but in my case i solved it with following idea.
That error usually happens if you try to override a class. That sometimes happens if you copy&paste code and forget to change e.g. the class name. But in my case it was little different
If you apply @login_required
to a class, you will receive the error message:
‘function’ object has no attribute ‘as_view’
So, how should you decorate classes in Django now?
For class-based views, you have two options of decorating your classes.
1) Decorating the URLconf
2) Decorating the class
Both options leads to the same result – restricting the access to a class only for logged users. The difference between the options is how the decorator is applied to the class instance.Refer this page for decorators implementation
https://docs.djangoproject.com/en/1.4/topics/class-based-views/#decorating-class-based-views
- [Django]-Django form: what is the best way to modify posted data before validating?
- [Django]-How to use MySQLdb with Python and Django in OSX 10.6?
- [Django]-Use fuzzy matching in django queryset filter
1👍
use this if you use a class your decorator should be
import first:
from django.utils.decorators import method_decorator
then
@method_decorator(login_required(login_url='login'),name="dispatch")
class YourClassView(YourView):
- [Django]-Django admin login suddenly demanding csrf token
- [Django]-Django shell mode in docker
- [Django]-Fastest way to create JSON to reflect a tree structure in Python / Django using mptt