Mit self.args
und self.kwargs
Arbeiten in jeder generischen Klasse-basierte-Ansicht falsch hier zu tun.
class ProjectCreateView(CreateView):
model = Project
form_class = ProjectForm
def get(self, request, *args, **kwargs):
project_name = self.kwargs.get('project_name', None)
# Do something
return super(ProjectUpdateView, self).get(request, *args, **kwargs)
Mit Blick auf Classy Class Based Views, eine tolle Seite für die Methoden betrachten und Attribute Standard CBVS, zeigt uns, warum dies so ist. Werfen Sie einen Blick auf diese aus dem TemplateView source code:
@classonlymethod
def as_view(cls, **initkwargs):
"""
Main entry point for a request-response process.
"""
# sanitize keyword arguments
for key in initkwargs:
if key in cls.http_method_names:
raise TypeError("You tried to pass in the %s method name as a "
"keyword argument to %s(). Don't do that."
% (key, cls.__name__))
if not hasattr(cls, key):
raise TypeError("%s() received an invalid keyword %r. as_view "
"only accepts arguments that are already "
"attributes of the class." % (cls.__name__, key))
def view(request, *args, **kwargs):
self = cls(**initkwargs)
if hasattr(self, 'get') and not hasattr(self, 'head'):
self.head = self.get
self.request = request
self.args = args
self.kwargs = kwargs
return self.dispatch(request, *args, **kwargs)
Die entpackten args und kwargs an die view
Methode übergeben werden gespeichert als Klassenattribute und jederpost Initialisierungsmethoden.