检索由class_based_view创建的实例

时间:2017-11-03 04:26:41

标签: python django

Django文档中指定了as_view方法 class-based-views

  

as_view()类方法创建类的实例并调用其dispatch()方法。

我尝试打印实例。  例如:

 # urls.py
from django.conf.urls import url
from myapp.views import MyView

urlpatterns = [
    url(r'^about/$', MyView.as_view()),
]


#views.py
from django.http import HttpResponse
from django.views import View

class MyView(View):
    def get(self, request):
        # <view logic>
        return HttpResponse('result')

我向print添加了views.py语句:

class MyView(View):
    print(self)
    def get(self, request):
        # <view logic>
        return HttpResponse('result')

报告NameError

如何打印由班级&#39;查看&#39;?

创建的实例

4 个答案:

答案 0 :(得分:8)

您可以使用视图的clearList() { let localBucketsArray = [...this.state.buckets]; map(localBucketsArray, function(bucket,key){ bucket.checked = false; }) this.setState({buckets: localBuckets}) } __repr__方法(这些方法默认由每个python类继承)。有两个选项:

  1. 获取表示(__str__你得到它吗?:D)每次调用REST方法时:

    __repr__

    或在class MyView(View): def get(self, request): # <view logic> print(self.__repr__()) return HttpResponse(result)

    中返回
    HttpResponse
  2. 每次实例化时获取类的表示形式:

    class MyView(View):
        def get(self, request):
            # <view logic>
            result['self_repr'] = self.__repr__()
            return HttpResponse(result)
    
  3. 最终结果将是这样的:

    class MyView(View):
        def __init__(self, *args, **kwargs):
            super().__init__(*args, **kwargs)
            print(self.__repr__())
    

    这不是很有帮助。您可以覆盖<my_app.views.MyView object at 0x7f63b5e05668> 方法以返回更具体的内容,但这取决于您!

答案 1 :(得分:3)

您正试图访问其范围之外的自我

class MyView(View):
    def __init__(self, *args, **kwargs):
        super(MyView, self).__init__(*args, **kwargs)
        print self

    def get(self, request):
        # <view logic>
        return HttpResponse('result')

答案 2 :(得分:1)

这样的东西不会像以下那样有用:

<app.views.MyView object at 0x000001720304E128>

当然,你可以通过定义:

来改善它
def __str__(self):
    return self.attibutehere

但是我觉得你正在寻找班级的实施细节。这是通过一个名为“内省”的过程完成的。

作为其他强大命令中的一个示例,有一个dir()命令可以在命令行中使用,如下所示:

project location>python manage.py shell
>>>from polls.views import IndexView
>>>iv=IndexView()
>>>dir(iv)
['__class__', ...whole bunch of interesting stuf here... , 'template_name_suffix']
>>> iv.__class__
<class 'polls.views.IndexView'>

答案 3 :(得分:0)

尝试:

class MyView(View):
    print(self)
    def get(self, request):
        print('self:', self)
        return HttpResponse('result')