我想知道是否可以在django中为我的视图创建一个自定义类,可以对不同的URL有效。
例如:
#urls.py
url(r'^$', CustomClass.as_view(), name='index'),
url(r'^other_url/(?P<example>[-\w]+)$', CustomClass.as_view(), name='other')
#views.py
CustomClass(View):
# for / url
def first_method(self, request):
pass
# for other_url/
def second_method(self, request, example):
pass
我已经阅读了有关基于类的视图的文档,但在该示例中仅讨论了单个URL ... https://docs.djangoproject.com/en/1.9/topics/class-based-views/intro/
所以,我想我必须为每个网址创建一个类。但是对于不同的URL,可以使用不同方法的相同类吗?
答案 0 :(得分:2)
您不需要为不同的网址创建不同的类。虽然在不同的URL中使用相同的类是非常多余的,但您可以这样做:
url(r'^$', CustomClass.as_view(), name='index'),
url(r'^other_url/(?P<example>[-\w]+)$', CustomClass.as_view(), name='other')
正是你正在做的事情。在某些情况下,您有一个要使用的泛型类(来自generics
模块/包的通用类,或者在OOP意义上的泛型)。比如说,一个例子:
url(r'^$', CustomBaseClass.as_view(), name='index'),
url(r'^other_url/(?P<example>[-\w]+)$', CustomChildClass.as_view(), name='other')
甚至是只有不同配置的同一个类(关于泛型类(从View
下降):接受的命名参数取决于它们在类中的定义方式):
url(r'^$', AGenericClass.as_view(my_model=AModel), name='index'),
url(r'^other_url/(?P<example>[-\w]+)$', AGenericClass.as_view(my_model=Other), name='other')
摘要使用url
时,在使用通用视图或传递任何类型的可调用时,您完全没有任何限制。