在 django 中使用自定义类视图让我出错

Posted

技术标签:

【中文标题】在 django 中使用自定义类视图让我出错【英文标题】:Using custom class view in django get me error 【发布时间】:2019-03-23 09:48:40 【问题描述】:

我正在学习 django,我正在尝试在 views.py 文件中创建自己的自定义类

这个类我会使用 has to 方法,一个用于经典的 html 渲染,另一个用于 json 响应

views.py 中我的类

class myListView():
    context = 
    def __init__(self, request):
        request = request
        context['PageTitle'] = 'Contacts'
        context['people'] = People.objects.all()

    def htmlRender(self, *args, **kwargs):
        context['children_template'] = 'people/list.html'
        return render(request,'base.html',context)

    def jsonRender(self, *args, **kwargs):
        return HttpResponse(json.dumps(self.context['people']), content_type="application/json")

我的 urls.py

    path('list', login_required(myListView.htmlRender()), name='list'),
    path('list/json', login_required(myListView.jsonRender()), name='list'),

这是调试器发送的错误:

TypeError: htmlRender() missing 1 required positional argument: 'self'

我不知道如何解决这个问题,也许我梦想在视图中使用自定义类?

谢谢你

【问题讨论】:

myListView().htmlRender() 怎么样? 如果我在 urls 中写这个,那就是响应 TypeError: __init__() missing 1 required positional argument: 'request' 【参考方案1】:
from django.views.generic import ListView

class myListView(ListView):

也许你没有扩展 ListView 类,试试这个。

【讨论】:

【参考方案2】:

您应该首先从“myListView”类创建一个实例,然后使用它:

myListViewInstance = myListView(arguments)

myListViewInstance.htmlRender()

【讨论】:

以上是关于在 django 中使用自定义类视图让我出错的主要内容,如果未能解决你的问题,请参考以下文章

django 使用一个 url 运行自定义视图类方法

自定义标注视图在使用来自 git 的库时出错

从 Django 中基于类的通用视图自定义表单变量的首选方法是啥?

django自定义用户视图?

Django:在编辑模型时自定义 FileField 值

django 基于类的视图自定义 404 和 500