检索由class_based_view创建的实例

Alg*_*bra -2 python django

Django文档as_view基于类的视图中指定方法

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')
Run Code Online (Sandbox Code Playgroud)

我添加了print一份声明views.py:

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

它报道NameError.

如何打印"View"类创建的实例?

Joh*_*fis 8

您可以使用视图__repr____str__方法(默认情况下,这些方法由每个python类继承).有两种选择:

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

    class MyView(View):
        def get(self, request):
            # <view logic>
            print(self.__repr__())
            return HttpResponse(result)
    
    Run Code Online (Sandbox Code Playgroud)

    或者将其归还HttpResponse:

    class MyView(View):
        def get(self, request):
            # <view logic>
            result['self_repr'] = self.__repr__()
            return HttpResponse(result)
    
    Run Code Online (Sandbox Code Playgroud)
  2. 每次实例化时获取类的表示:

    class MyView(View):
        def __init__(self, *args, **kwargs):
            super().__init__(*args, **kwargs)
            print(self.__repr__())
    
    Run Code Online (Sandbox Code Playgroud)

最终的结果虽然如下:

<my_app.views.MyView object at 0x7f63b5e05668>
Run Code Online (Sandbox Code Playgroud)

这不是很有帮助.您可以覆盖该__str__()方法以返回更具体的内容,但这取决于您!