【发布时间】:2021-02-14 18:30:42
【问题描述】:
我是 Django 新手,正在尝试将基于函数的视图重构为 CBV。 我得到了其他一切工作,并且分页工作(它在每个页面上显示“JOBS_PER_PAGE”作业),但唯一的问题是在模板中,page_obj 不起作用。尽管该页面有下一页,但页面导航器全部变灰并禁用。 page_obj.number 不返回任何内容。我查看了其他帖子,但找不到任何有用的信息。
为了让 page_obj 在模板中正常工作,我需要做任何额外的步骤吗?
urls.py
urlpatterns = [
path('', views.landing_page, name='landing-page'),
path('search/<int:pk>/', views.SearchView.as_view(), name='search'),
path('apply/<int:pk>/', views.apply, name='apply'),
path('result/<int:pk>/', views.result, name='result'),
path('start/', views.start, name='start'),
path('eor/<int:pk>', views.end_of_round, name='end-of-round'),
path('closing/<int:pk>', views.closing, name='closing')
]
views.py
class SearchView(ListView):
model = Job
context_object_name = 'jobs'
template_name = 'simulation/search.html'
paginate_by = JOBS_PER_PAGE
def setup(self, request, *args, **kwargs):
super().setup(request, *args, **kwargs)
self.respondent = Respondent.objects.get(pk=self.kwargs['pk'])
if self.respondent.is_out_of_money():
self.respondent.increment_round()
self.respondent.save()
return redirect('simulation:end-of-round', pk=self.respondent.id)
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['respondent'] = self.respondent
return context
def post(self, request, *args, **kwargs):
self.respondent.subtract_from_balance(request.POST.get('more_info_fee'))
self.respondent.add_to_jobs_more_info(request.POST.get('selected_job'))
self.respondent.log_time_spent()
self.respondent.increment_stage()
self.respondent.save()
return redirect('simulation:search', pk=self.respondent.id)
搜索.html
{% if is_paginated %}
<nav aria-label="...">
<ul class="pagination">
{% if page_obj.has_previous %}
<li class="page-item">
<a class="page-link" href="?page={{ page_obj.previous_page_number }}">Previous</a>
</li>
<li class="page-item">
<a class="page-link" href="?page={{ page_obj.previous_page_number }}">{{ page_obj.previous_page_number }}</a>
</li>
{% else %}
<li class="page-item disabled">
<a class="page-link" href="#" tabindex="-1" aria-disabled="true">Previous</a>
</li>
{% endif %}
<li class="page-item">
<a class="page-link" href="?page={{ page_obj.number }}">{{ page_obj.number }}</a>
</li>
{% if jobs.has_next %}
<li class="page-item">
<a class="page-link" href="?page={{ page_obj.next_page_number }}">{{ page_obj.next_page_number }}</a>
</li>
<li class="page-item">
<a class="page-link" href="?page={{ page_obj.next_page_number }}">Next</a>
</li>
{% else %}
<li class="page-item disabled">
<a class="page-link" href="#" tabindex="-1" aria-disabled="true">Next</a>
</li>
{% endif %}
</ul>
</nav>
{% endif %}
编辑:
模板search.html 的结构为
{% block A %}
{% endblock A %}
CODE ABOVE
{% block B %}
{% endblock B %}
page_obj 可以在块 A 和块 B 中访问,但不能在块之间访问。
[1]: https://i.stack.imgur.com/jr7Dx.png
【问题讨论】:
-
JOBS_PER_PAGE的值是多少? -
JOBS_PER_PAGE是 2,数据库中有 3 个Jobs,它在第 1 页显示 2。如果我在 URL 中手动输入?page=2,它会显示第三个作业.所以一切都是正确的,但是 page_obj :/
标签: django