Andrew Pinkham释放的Django示例
Django 1.8(不现代,但我按照这本书) .
class PostList(View):
template_name = ''
def get(self, request):
return render(
request,
self.template_name,
{'post_list': Post.objects.all()})
urlpatterns = [
url(r'^$',
PostList.as_view(template_name='blog/post_list.html'),
name='blog_post_list'),
在书里:
我们是否希望更改template_name类属性的值,例如,我们只需要将其作为命名参数传递给blog_post_list URL模式中的as_view() . 但是,如果template_name属性未定义(我们从未在类定义中设置它),则as_view将忽略它 . 如果取消设置template_name并且开发人员忘记传递它,我们应该引发一个ImproperlyConfigured异常 .
你能帮我理解第2点和第3点吗? Point 2:
class PostList(View):
#template_name = ''
def get(self, request):
urlpatterns = [
url(r'^$',
PostList.as_view(template_name='blog/post_list.html'),
我得到“PostList()收到一个无效的关键字'template_name'.as_view只接受已经是该类属性的参数 . 而在书中我读到没有任何事情会发生(”as_view将忽略它“) .
第3点:
class PostList(View):
template_name = ''
def get(self, request):
url(r'^$',
PostList.as_view(),
name='blog_post_list'),
我在/ blog /获得了“TemplateDoesNotExist” . raise TemplateDoesNotExist(template_name)...▶Local vars template_name''
好吧,在书中它应该是一个不正确配置的例外 .
你能否评论一下:Django发生了一些变化,或者我没跟上这本书 . 那么,我怎样才能模仿第2点和第3点的行为呢?
1 回答
据我所知,这本书在第2点是错误的 . 当你为as_view提供一个关键字参数时,检查该类是否具有该属性,否则抛出类似你得到的TypeError .
另一个值得注意的一点是,您不能在as_view中使用任何http_method_names作为关键字参数 . (即get,post,put,delete等)因为这些是Django中基于类的视图的限制入口点 . 但是,您可以在自己的视图类中覆盖它们 .
第3点我认为是一种误解 . 本书实际上并没有说它会抛出错误,而是告诉你应该在这些情况下抛出一个不正确的配置 .