Python 在Django中实例化视图类时出错

Python 在Django中实例化视图类时出错,python,django,class,view,instance,Python,Django,Class,View,Instance,我是Django的新手,到目前为止,我的所有项目都使用了通用视图。我用url.py代码调用了它们 模式(r“^url$”,DetailView.as_view()) 然而,现在我正试图创建自己的基于类的视图,并且在这方面遇到了困难。我试着做一个简单的测试,从视图中调用model.py函数,但出现了一个错误,我没有实例化该类的实例。我应该如何实例化视图类?另外,为什么调用DetailView时没有出现相同的错误。作为_view(),DetailView类也没有实例化,对吗 我的代码: models

我是Django的新手,到目前为止,我的所有项目都使用了通用视图。我用url.py代码调用了它们

模式(r“^url$”,DetailView.as_view())

然而,现在我正试图创建自己的基于类的视图,并且在这方面遇到了困难。我试着做一个简单的测试,从视图中调用model.py函数,但出现了一个错误,我没有实例化该类的实例。我应该如何实例化视图类?另外,为什么调用DetailView时没有出现相同的错误。作为_view(),DetailView类也没有实例化,对吗

我的代码:

models.py

class Post(models.Model):
    title = models.CharField(max_length=140)
    body = models.TextField()

    def __unicode__(self):
        return self.title

    def getBody(self):
        return self.body
view.py

class RatingView(generic.DetailView):
    model = Post
    template_name = "like.html"

    def __init__(self):
        model = Post
        template_name = "like.html"

    def modelFuncTest(self):
        return HttpResponse(self.model.getBody())
url.py

from django.conf.urls import patterns, include, url
from django.views.generic import ListView, DetailView
from blog.views import RatingView
from blog.models import Post

urlpatterns = patterns('',
    url(r'^(?P<pk>\d+)/like/$', RatingView.modelFuncTest()),
)
从django.conf.url导入模式,包括,url
从django.views.generic导入ListView,DetailView
从blog.views导入分级视图
从blog.models导入帖子
urlpatterns=模式(“”,
url(r'^(?P\d+)/like/$,RatingView.modelFuncTest(),
)

您仍然需要在
urlpatterns
中对类调用
as\u view()
函数:

urlpatterns = patterns('',
                       url(r'^(?P<pk>\d+)/like/$', RatingView.as_view()),
                       )
urlpatterns=patterns(“”,
url(r'^(?P\d+)/like/$,RatingView.as_view()),
)
关于这一点:

另外,为什么调用DetailView时没有出现相同的错误。作为_view(),DetailView类也没有实例化,对吗


as_view()
函数是一个类方法,它返回视图类的实例,当您的URL模式被点击时可以调用该实例。

将您的views.py更改为:

class RatingView(generic.DetailView):
    model = Post
    template_name = "like.html"
并将URL.py更改为:

from django.conf.urls import patterns, url
from blog.views import RatingView

urlpatterns = patterns('',
    url(r'^(?P<pk>\d+)/like/$', RatingView.as_view()),
)

基于类的视图的美妙之处在于可以为您传递对象的上下文。

我知道这是可行的,但您从未调用modelFuncTest(),这正是我试图解决的问题。我知道这个示例不要求调用它才能工作,但我正在尝试在做更多操作之前测试从不同类中调用方法的规模较小。@Oblivionkey3如果您试图在模型上完成getBody()函数的调用,那么在模板类型{{post.getBody}中,这将返回您的主体。你不应该在视图中这样做。如果你坚持从你的URL文件调用函数,那只是一种不好的做法,我对此没有任何评论:)那么我该如何调用函数呢?就像我说的,我是Django的新手,我知道如何制作函数等等。只是我不知道应该如何使用它们。@OblivionKey 3正确的,基于函数的视图根本不是坏习惯,但这是另一个问题。如果在“like.html”模板中,有问题中的models.py,然后有答案中的views.py和url.py,您将能够调用{{post.getBody}},这将调用模型上的getBody函数。试一试。如果我用url调用as_view(),我如何调用modelFuncTest()?如果没有,Django将调用从
as_view()调用创建的视图实例。这意味着您应该将
modelFuncTest()
的名称更改为
get()
。在处理基于类的视图之前,您可能应该阅读或者甚至从基于函数的视图(这更容易入门)开始。还可以回头看看Django关于视图的教程。祝你好运谢谢你的帮助,我找到了一些在线资源,现在就得到了
{{ post.body }}