Python 在Django中为DetailView内的上下文分页
我有一个资产详细视图,它使用来自另外两个模型(租户和服务)的数据 asset\views.pyPython 在Django中为DetailView内的上下文分页,python,django,django-class-based-views,Python,Django,Django Class Based Views,我有一个资产详细视图,它使用来自另外两个模型(租户和服务)的数据 asset\views.py class AssetMultipleDetailView(LoginRequiredMixin, UserPassesTestMixin, DetailView): model = Asset context_object_name = 'asset' template_name = 'asset/asset_multiple_detail.html' def te
class AssetMultipleDetailView(LoginRequiredMixin, UserPassesTestMixin, DetailView):
model = Asset
context_object_name = 'asset'
template_name = 'asset/asset_multiple_detail.html'
def test_func(self):
asset_multiple = self.get_object()
if self.request.user == asset_multiple.owner:
return True
return False
def get_context_data(self, **kwargs):
context = super(AssetMultipleDetailView, self).get_context_data(**kwargs)
context['tenants'] = Tenant.objects.filter(asset=context['asset']).order_by('created')
context['services'] = Service.objects.filter(asset=context['asset']).order_by('created')
return context
我想对上下文['tenants]和上下文['services']中的数据进行分页,我不知道如何实现这一点
我已经在他们自己的列表视图中使用了由分页的实现了这一点,并使其在没有任何问题的情况下工作
我只是想知道如何在DetailView中为上下文分页
提前感谢。您可以按照“在视图中放置分页”中提供的示例进行操作。像这样:
class AssetMultipleDetailView(LoginRequiredMixin, UserPassesTestMixin, DetailView):
...
def get_context_data(self, **kwargs):
context = super(AssetMultipleDetailView, self).get_context_data(**kwargs)
page = request.GET.get('page')
tenants = paginator = Paginator(Tenant.objects.filter(asset=self.get_object()).order_by('created'), 5) # will show 5 items in one page
services = Paginator(Service.objects.filter(asset=self.get_object()).order_by('created'), 5)
context['tenants'] = tenants.get_page(page)
context['services'] = services.get_page(page)
return context
并按如下方式更新模板:
// tenants pages
<div class="pagination">
<span class="step-links">
{% if tenants.has_previous %}
<a href="?page=1">« first</a>
<a href="?page={{ tenants.previous_page_number }}">previous</a>
{% endif %}
<span class="current">
Page {{ tenants.number }} of {{ tenants.paginator.num_pages }}.
</span>
{% if tennats.has_next %}
<a href="?page={{ tenants.next_page_number }}">next</a>
<a href="?page={{ tenants.paginator.num_pages }}">last »</a>
{% endif %}
</span>
</div>
// services
<div class="pagination">
<span class="step-links">
{% if services.has_previous %}
<a href="?page=1">« first</a>
<a href="?page={{ services.previous_page_number }}">previous</a>
{% endif %}
<span class="current">
Page {{ services.number }} of {{ services.paginator.num_pages }}.
</span>
{% if services.has_next %}
<a href="?page={{ services.next_page_number }}">next</a>
<a href="?page={{ services.paginator.num_pages }}">last »</a>
{% endif %}
</span>
</div>
//租户页面
{%if tenants.has_previous%}
{%endif%}
第{{tenants.paginator.num_pages}页中的第{{tenants.number}页。
{%如果tennats.has_next%}
{%endif%}
//服务
{%if services.has_previous%}
{%endif%}
第{{services.paginator.num_pages}页中的第{services.number}页。
{%if services.has_next%}
{%endif%}
看看这个:谢谢你。我之前看到过。但它引用了Partner DetailView中的Partner模型。在我的例子中,我指的是AssetDetailView中的租户和服务模型。