2014-02-24 39 views
0

当你写一个扩展Django的视图DetailView可以覆盖各种方法,如get_queryset()get_object()get_context_data()python Django DetailView的方法的生命周期是什么?

我在阅读了“对象”属性中get_context_data困难。具体而言,似乎存在,但 'object' 类:

def get_context_data(self, **kwargs): 
    context = super(SectionTextDetailView, self).get_context_data(**kwargs) 
    if object: 
     print (str(object)) 
     ## in reality try some logic with the object here 
    else: 
     print("very bad!") 
    return context 

(此打印 “”)

我怀疑get_object()get_context_data()之后叫什么名字?真的吗?

我的整体问题是 - View类中的方法的生命周期(评估顺序)是什么,特别是DetailView

我在Django文档中查看了DetailViewSingleObjectMixin的参考条目,似乎没有明确提及这一点。

回答

5

你没有定义什么叫object这里。这个名字唯一的东西是内置的Python类型。

你或许应该使用self.object。看着the codeget_object立即打电话给get(),所以它应该立即可用。

+0

是的,我意识到我粘贴代码后发生错误。 评估的顺序是get_object(),然后是get_context_data()。与django文档中看似隐含的内容相反,get_queryset()从来不会在DetailView中调用,因为我们正在处理单个对象而不是alist。 – scot

+1

@scot'get_queryset()'* *将被调用,在['get_object'](https://github.com/django/django/blob/1.6/django/views/generic/detail.py#L21)方法。 – Alasdair

+0

可能没有在我的堆栈中被调用,因为我重写get_object只使用objects.get(pk),然后不调用super() – scot

相关问题