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网址格式中的as_view()。
- 但是,如果template_name属性未定义(我们从未在类定义中设置它),则as_view将忽略它。
- 如果取消设置template_name并且开发人员忘记传递它,我们应该提出一个ImproperlyConfigured异常。
醇>
你能帮我理解第2点和第3点吗? 第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。 提升TemplateDoesNotExist(template_name)...... ▶本地变种 template_name''
好吧,在书中它应该是一个NotperlyConfigured例外。
你能否评论一下:Django发生了一些变化,或者我没有按照这本书的说法。那么,我怎样才能模仿第2点和第3点的行为?
答案 0 :(得分:1)
据我所知,这本书在第2点是错误的。 当您向as_view提供关键字参数时,会检查该类是否具有该属性,否则会抛出类似于您获得的TypeError。
另一个值得注意的问题是,您不能在as_view中使用任何http_method_names作为关键字参数。 (即get,post,put,delete等)因为这些是Django中基于类的视图的限制入口点。但是,您可以在自己的视图类中覆盖它们。
第3点我认为是一种误解。这本书实际上并没有说它会抛出错误,而是告诉你应该在这些情况下抛出一个不正确的配置。