Django投票 - 为一个网页使用两个视图

时间:2012-08-01 18:45:11

标签: django django-voting

我有一个名为view_requests.html的网页。在页面上有一个标签,我想基本上有一个人们可以投票的reddit风格的对象列表。我使用django-voting完成了这项工作。

但是,在第二个标签页上,我希望能够添加请求。这要求我有一张人们可以提交的表格。

我面临的问题是要实现Reddit样式投票,我必须在我的URLs.py中使用以下配置(即不在views.py中为它创建我自己的视图)。但是要创建表单,我需要访问我在views.py中编写的一些代码。是否可以在单独的选项卡中将两者放在同一页面上,我将如何进行此操作?

url(r'^view_requests/?$', object_list, dict(queryset=LibraryRequest.objects.all(),
        template_object_name='request', template_name='spicemodels/view_requests.html',
        paginate_by=15, allow_empty=True), name="view_requests"),

1 个答案:

答案 0 :(得分:1)

你没有 来使用它; object_list是内置的Django 通用视图。通用是关键字,因为它只是为了让您更容易如果您的视图符合标准。因为,您需要的视图比object_list所能提供的更多,所以是时候把它扔掉并编写自己的视图了。您可以使用object_list作为创建自己视图的指南,但其中有许多无关的样板代码只是为了使其通用。简单地说,以下是您所需要的:

def my_view(request, page=None):
    paginate_by = 15

    qs = LibraryRequest.objects.all()
    paginator = Paginator(qs, paginate_by, allow_empty_first_page=True)
    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

    render_to_response('spicemodels/view_requests.html', {
        'request_list': page_obj.object_list,
        'paginator': paginator,
        'page_obj': page_obj,
        'is_paginated': page_obj.has_other_pages(),
    }, context_instance=RequestContext(request))