2013-05-09 90 views
2

我的代碼是這樣的: 我定製我的背景和要訪問我的查詢在模板中設置Django的訪問上下文

class GetStudentQueryHandler(ListView): 
    template_name = 'client.html' 
    paginate_by = STUDENT_PER_PAGE 
    context_object_name = 'studentinfo' 

    def get_context_data(self, **kwargs): 
     context = super(GetStudentQueryHandler, self).get_context_data(**kwargs) 
     context['can_show_distribute'] = self.request.user.has_perm('can_show_distribute_page') 
     context['form'] = QueryStudentForm 

     return context 

    def get_queryset(self): 

的問題是:如何訪問由get_queryset方法返回的查詢集模板? 我知道我可以訪問像studentinfo.can_show_distribute這樣的自定義屬性,如何訪問查詢數據?

回答

6

正如書面here,用於ListView默認上下文變量是objects_list

所以在模板它可以如以下進行訪問:

{% for obj in objects_list%} 
    {{obj.some_field}} 
{% endfor %} 

此外,它可以被手動地與context_object_name參數集(如在你的例子中):

class GetStudentQueryHandler(ListView): 
    # ... 
    context_object_name = 'studentinfo' 
    # ... 

and in template:

{% for obj in studentinfo %} 
    {{obj.some_field}} 
{% endfor %} 
+0

我知道,但我customed我的上下文中get_context_data方法,我添加了「can_show_distribute」,恐怕領域如果我用for循環,我也將訪問自定義字段,但我只想顯示get_queryset方法返回的數據。 – 2013-05-09 09:16:00

+1

嗯,你已經這樣做了:'context = super(GetStudentQueryHandler,self).get_context_data(** kwargs)'。所以你的上下文將包括所有'ListView'添加的字段。要從模板訪問'can_show_distribute',你應該這樣做:'{{can_show_distribute}}',而不是這個:'{{studentinfo.can_show_distribute}}' – stalk 2013-05-09 09:21:02

+1

所以你的意思是「studentinfo」對象只代表get_queryset返回的查詢集方法?好的,我會試一試,如果有效的話,我會接受你的回答,謝謝 – 2013-05-09 09:23:24