2011-05-19 67 views
0

在我的看法如下功能一个被称为像Django的通用视图

def post_list(request, page=0, paginate_by=20, **kwargs): 
    page_size = getattr(settings,'BLOG_PAGESIZE', paginate_by) 
    return list_detail.object_list(
    request, 
    queryset=Post.objects.published(), 
    paginate_by=page_size, 
    page=page, 
    **kwargs 
) 

我需要通过我的字典到页面我该怎么办呢..

在/ usr/mysite的/ Django的/ Django的/视图/通用list_detail.py

def object_list(request, queryset, paginate_by=None, page=None, 
      allow_empty=True, template_name=None, template_loader=loader, 
      extra_context=None, context_processors=None, template_object_name='object', 
      mimetype=None): 
     """ 
     Generic list of objects. 

     Templates: ``<app_label>/<model_name>_list.html`` 
     Context: 
      object_list 
       list of objects 
      is_paginated 
       are the results paginated? 
      results_per_page 
       number of objects per page (if paginated) 
      has_next 
       is there a next page? 
      has_previous 
       is there a prev page? 
      page 
       the current page 
      next 
       the next page 
      previous 
       the previous page 
      pages 
       number of pages, total 
      hits 
       number of objects, total 
      last_on_page 
       the result number of the last of object in the 
       object_list (1-indexed) 
      first_on_page 
       the result number of the first object in the 
       object_list (1-indexed) 
      page_range: 
       A list of the page numbers (1-indexed). 
     """ 
     if extra_context is None: extra_context = {} 
     queryset = queryset._clone() 
     if paginate_by: 
      paginator = Paginator(queryset, paginate_by, allow_empty_first_page=allow_empty) 
      if not page: 
       page = request.GET.get('page', 1) 
      try: 
       page_number = int(page) 
      except ValueError: 
       if page == 'last': 
        page_number = paginator.num_pages 
       else: 
        # Page is not 'last', nor can it be converted to an int. 
        raise Http404 
      try: 
       page_obj = paginator.page(page_number) 
      except InvalidPage: 
       raise Http404 
      c = RequestContext(request, { 
       '%s_list' % template_object_name: page_obj.object_list, 
       'paginator': paginator, 
       'page_obj': page_obj, 

       # Legacy template context stuff. New templates should use page_obj 
       # to access this instead. 
       'is_paginated': page_obj.has_other_pages(), 
       'results_per_page': paginator.per_page, 
       'has_next': page_obj.has_next(), 
       'has_previous': page_obj.has_previous(), 
       'page': page_obj.number, 
       'next': page_obj.next_page_number(), 
       'previous': page_obj.previous_page_number(), 
       'first_on_page': page_obj.start_index(), 
       'last_on_page': page_obj.end_index(), 
       'pages': paginator.num_pages, 
       'hits': paginator.count, 
       'page_range': paginator.page_range, 
      }, context_processors) 
     else: 
      c = RequestContext(request, { 
       '%s_list' % template_object_name: queryset, 
       'paginator': None, 
       'page_obj': None, 
       'is_paginated': False, 
      }, context_processors) 
      if not allow_empty and len(queryset) == 0: 
       raise Http404 
     for key, value in extra_context.items(): 
      if callable(value): 
       c[key] = value() 
      else: 
       c[key] = value 
     if not template_name: 
      model = queryset.model 
      template_name = "%s/%s_list.html" % (model._meta.app_label, model._meta.object_name.lower()) 
     t = template_loader.get_template(template_name) 
     return HttpResponse(t.render(c), mimetype=mimetype) 

回答

0

您是否尝试过使用extra_context变量Django的通用视图的?

def post_list(request, page=0, paginate_by=20, **kwargs): 
    page_size = getattr(settings,'BLOG_PAGESIZE', paginate_by) 
    return list_detail.object_list(
    request, 
    queryset=Post.objects.published(), 
    paginate_by=page_size, 
    page=page, 
    extra_context={'my':dict}, 
    **kwargs 
) 
+0

@rebus:from post_list什么都可以返回我可以将它传递给另一个页面并在该页面中呈现返回的项目? – Rajeev 2011-05-19 07:40:44

+0

'object_list'将返回'HttpResponse'对象。如果你需要更多的东西在模板中传递'extra_context'。如果在“其他页面”下,您的意思是另一个分页页面,则需要为查询集分页。对不起,我不完全明白你需要什么。 – 2011-05-19 08:04:21

+0

@rebus:有另一个页面说a.html我需要从object_list发送内容,其中object_list将返回一个不同的页面呈现为a.html – Rajeev 2011-05-19 08:21:39