首页 文章

基于 class 的观点(不能按照书中的叙述)

提问于
浏览
0

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 回答

  • 1

    据我所知,这本书在第2点是错误的 . 当你为as_view提供一个关键字参数时,检查该类是否具有该属性,否则抛出类似你得到的TypeError .

    另一个值得注意的一点是,您不能在as_view中使用任何http_method_names作为关键字参数 . (即get,post,put,delete等)因为这些是Django中基于类的视图的限制入口点 . 但是,您可以在自己的视图类中覆盖它们 .

    第3点我认为是一种误解 . 本书实际上并没有说它会抛出错误,而是告诉你应该在这些情况下抛出一个不正确的配置 .

相关问题