django通用视图

时间:2011-05-19 07:11:35

标签: django django-models django-templates django-views

在我的一个视图中,以下函数被称为

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 / views / generic 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)

1 个答案:

答案 0 :(得分:0)

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

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
  )