在搜索表单中使用 POST 方法时,Django 分页无法正常工作
Django pagination is not working properly when using POST method in Search form
我正在尝试使用 POST 方法搜索表单中的项目,我得到了结果。但是当我使用Django分页时,我得到的结果在第一页。当我在 Django paginator 中单击 next 或 2 按钮时,出现这样的错误。
The view profiles.views.individual_home didn't return an HttpResponse object. It returned None instead.
这里的搜索表单在一个 html 页面中,结果显示在另一个 html 页面中。
views.py
def individual_home(request):
if request.method == 'GET':
keyword = request.GET.get('keywords')
print(keyword)
location = request.GET.get('location')
print(location)
ind = IndividualProfile.objects.get(user_id=request.user.id)
details = companyjob.objects.filter(
Q(job_title=keyword) | Q(qualification=keyword) | Q(skills_required=keyword) | Q(job_location=location) & Q(closing_date__gte=datetime.date.today()))
if details:
print(details)
count = details.count()
paginator = Paginator(details, 3)
page_number = request.GET.get('page')
page_obj = paginator.get_page(page_number)
return render(request, "individual_home.html",
{'jobs': page_obj,'count': count, 'ind': ind})
else:
return redirect("individual_homes")
individual_home.html:
<div class="container mt-5">
<div class="row mt-5">
<div class="col-lg-10 mx-auto">
<div class="career-search mb-60">
<form method="GET" action="{% url 'individual_home' %}" class="career-form mb-60" style="background-color:#6351ce;">
<div class="row">
<div class="col-md-6 col-lg-4 my-3">
<div class="input-group position-relative">
<input type="text" class="form-control" placeholder="Enter Your Keywords" id="keywords" name="keywords">
</div>
</div>
<div class="col-md-6 col-lg-4 my-3">
<input type="text" class="form-control" placeholder="Location" id="location" name="location">
<div class="col-md-6 col-lg-4 my-3">
<button type="submit" class="btn btn-lg btn-block btn-light btn-custom" id="contact-submit">
Search
</button>
</div>
</div>
</form>
<div class="filter-result">
<p class="mb-30 ff-montserrat">Job Openings Based On Your Profile : {{count}}</p>
{% for i in jobs %}
<div class="job-box d-md-flex align-items-center justify-content-between mb-30">
<div class="job-left my-4 d-md-flex align-items-center flex-wrap">
<a href="{% url 'job_details' i.id %}">
<div class="img-holder mr-md-4 mb-md-0 mb-4 mx-auto mx-md-0 d-md-none d-lg-flex" style="background-color:#6351ce;">
{{i.job_title.0}}
</div></a>
<div class="job-content">
<a href="{% url 'job_details' i.id %}"><h4 class="text-center text-md-left">{{i.job_title}}</h4></a><br>
<p class="mr-md-4 text-success"><span style="width:10px;height:10px;border-radius:50%;background-color:green;display:inline-block;"></span>  Active</p>
<ul class="d-md-flex flex-wrap text-capitalize ff-open-sans">
<li class="mr-md-4">
<i class="fa fa-briefcase mr-2"></i> {{i.user.first_name}} {{i.user.last_name}}
</li>
<li class="mr-md-4">
<i class="zmdi zmdi-pin mr-2"></i> {{i.job_location}}
</li>
<li class="mr-md-4">
<i class="fa fa-inr mr-2"></i> {{i.salary}} {{i.salary_period}}
</li>
<li class="mr-md-4">
<i class="zmdi zmdi-time mr-2"></i> {{ i.posted_date | naturaltime }}
</li>
</ul>
</div>
</div>
<div class="job-right my-4 flex-shrink-0">
<a href="{% url 'job_details' i.id %}" class="btn btn-outline-danger" style="outline-color:#6351ce;">{{i.type}}</a>
</div>
</div>
{% endfor %}
</div>
</div>
<!--Pagination-->
<nav aria-label="Page navigation example">
<ul class="pagination justify-content-center">
{% if jobs.has_previous %}
<li class="page-item">
<a class="page-link" href="?page={{ jobs.previous_page_number }}">Previous</a>
</li>
{% else %}
<li class="page-item disabled">
<a class="page-link" href="#" tabindex="-1" aria-disabled="True">Previous</a>
</li>
{% endif %}
{% if jobs.number|add:'-4' > 1 %}
<li class="page-item"><a class="page-link" href="?page={{ jobs.number|add:'-5' }}">…</a></li>
{% endif %}
{% for i in jobs.paginator.page_range %}
{% if jobs.number == i %}
<li class="page-item active" aria-current="page">
<span class="page-link">
{{ i }}
<span class="sr-only">(current)</span>
</span>
</li>
{% elif i > jobs.number|add:'-5' and i < jobs.number|add:'5' %}
<li class="page-item"><a class="page-link" href="?page={{ i }}">{{ i }}</a></li>
{% endif %}
{% endfor %}
{% if jobs.paginator.num_pages > jobs.number|add:'4' %}
<li class="page-item"><a class="page-link" href="?page={{ jobs.number|add:'5' }}">…</a></li>
{% endif %}
{% if jobs.has_next %}
<li class="page-item">
<a class="page-link" href="?page={{ jobs.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>
<!--end of Pagination-->
</div>
</div>
想法是将关键字和位置传递给上下文。
def individual_home(request):
if request.method == 'GET':
keyword = request.GET.get('keywords')
print(keyword)
location = request.GET.get('location')
print(location)
ind = IndividualProfile.objects.get(user_id=request.user.id)
details = companyjob.objects.filter(
Q(job_title=keyword) | Q(qualification=keyword) | Q(skills_required=keyword) | Q(job_location=location) & Q(closing_date__gte=datetime.date.today()))
if details:
print(details)
count = details.count()
paginator = Paginator(details, 3)
page_number = request.GET.get('page')
page_obj = paginator.get_page(page_number)
return render(request, "individual_home.html",
{'keyword':keyword,'location':location,'jobs': page_obj,'count': count, 'ind': ind})
else:
return redirect("individual_homes")
像这样更改页码。
<!--Pagination-->
<nav aria-label="Page navigation example">
<ul class="pagination justify-content-center">
{% if jobs.has_previous %}
<li class="page-item">
<a class="page-link" href="?page={{ jobs.previous_page_number }}&keywords={{ keyword }}&location={{ location }}">Previous</a>
</li>
{% else %}
<li class="page-item disabled">
<a class="page-link" href="#" tabindex="-1" aria-disabled="True">Previous</a>
</li>
{% endif %}
{% if jobs.number|add:'-4' > 1 %}
<li class="page-item"><a class="page-link" href="?page={{ jobs.previous_page_number }}&keywords={{ keyword }}&location={{ location }}">…</a></li>
{% endif %}
{% for i in jobs.paginator.page_range %}
{% if jobs.number == i %}
<li class="page-item active" aria-current="page">
<span class="page-link">
{{ i }}
<span class="sr-only">(current)</span>
</span>
</li>
{% elif i > jobs.number|add:'-5' and i < jobs.number|add:'5' %}
<li class="page-item"><a class="page-link" href="?page={{ i }}&keywords={{ keyword }}&location={{ location }}"">{{ i }}</a></li>
{% endif %}
{% endfor %}
{% if jobs.paginator.num_pages > jobs.number|add:'4' %}
<li class="page-item"><a class="page-link" href="?page={{ jobs.number|add:'5' }}&keywords={{ keyword }}&location={{ location }}">…</a></li>
{% endif %}
{% if jobs.has_next %}
<li class="page-item">
<a class="page-link" href="?page={{ jobs.next_page_number }}&keywords={{ keyword }}&location={{ location }}">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>
<!--end of Pagination-->
我正在尝试使用 POST 方法搜索表单中的项目,我得到了结果。但是当我使用Django分页时,我得到的结果在第一页。当我在 Django paginator 中单击 next 或 2 按钮时,出现这样的错误。
The view profiles.views.individual_home didn't return an HttpResponse object. It returned None instead.
这里的搜索表单在一个 html 页面中,结果显示在另一个 html 页面中。
views.py
def individual_home(request):
if request.method == 'GET':
keyword = request.GET.get('keywords')
print(keyword)
location = request.GET.get('location')
print(location)
ind = IndividualProfile.objects.get(user_id=request.user.id)
details = companyjob.objects.filter(
Q(job_title=keyword) | Q(qualification=keyword) | Q(skills_required=keyword) | Q(job_location=location) & Q(closing_date__gte=datetime.date.today()))
if details:
print(details)
count = details.count()
paginator = Paginator(details, 3)
page_number = request.GET.get('page')
page_obj = paginator.get_page(page_number)
return render(request, "individual_home.html",
{'jobs': page_obj,'count': count, 'ind': ind})
else:
return redirect("individual_homes")
individual_home.html:
<div class="container mt-5">
<div class="row mt-5">
<div class="col-lg-10 mx-auto">
<div class="career-search mb-60">
<form method="GET" action="{% url 'individual_home' %}" class="career-form mb-60" style="background-color:#6351ce;">
<div class="row">
<div class="col-md-6 col-lg-4 my-3">
<div class="input-group position-relative">
<input type="text" class="form-control" placeholder="Enter Your Keywords" id="keywords" name="keywords">
</div>
</div>
<div class="col-md-6 col-lg-4 my-3">
<input type="text" class="form-control" placeholder="Location" id="location" name="location">
<div class="col-md-6 col-lg-4 my-3">
<button type="submit" class="btn btn-lg btn-block btn-light btn-custom" id="contact-submit">
Search
</button>
</div>
</div>
</form>
<div class="filter-result">
<p class="mb-30 ff-montserrat">Job Openings Based On Your Profile : {{count}}</p>
{% for i in jobs %}
<div class="job-box d-md-flex align-items-center justify-content-between mb-30">
<div class="job-left my-4 d-md-flex align-items-center flex-wrap">
<a href="{% url 'job_details' i.id %}">
<div class="img-holder mr-md-4 mb-md-0 mb-4 mx-auto mx-md-0 d-md-none d-lg-flex" style="background-color:#6351ce;">
{{i.job_title.0}}
</div></a>
<div class="job-content">
<a href="{% url 'job_details' i.id %}"><h4 class="text-center text-md-left">{{i.job_title}}</h4></a><br>
<p class="mr-md-4 text-success"><span style="width:10px;height:10px;border-radius:50%;background-color:green;display:inline-block;"></span>  Active</p>
<ul class="d-md-flex flex-wrap text-capitalize ff-open-sans">
<li class="mr-md-4">
<i class="fa fa-briefcase mr-2"></i> {{i.user.first_name}} {{i.user.last_name}}
</li>
<li class="mr-md-4">
<i class="zmdi zmdi-pin mr-2"></i> {{i.job_location}}
</li>
<li class="mr-md-4">
<i class="fa fa-inr mr-2"></i> {{i.salary}} {{i.salary_period}}
</li>
<li class="mr-md-4">
<i class="zmdi zmdi-time mr-2"></i> {{ i.posted_date | naturaltime }}
</li>
</ul>
</div>
</div>
<div class="job-right my-4 flex-shrink-0">
<a href="{% url 'job_details' i.id %}" class="btn btn-outline-danger" style="outline-color:#6351ce;">{{i.type}}</a>
</div>
</div>
{% endfor %}
</div>
</div>
<!--Pagination-->
<nav aria-label="Page navigation example">
<ul class="pagination justify-content-center">
{% if jobs.has_previous %}
<li class="page-item">
<a class="page-link" href="?page={{ jobs.previous_page_number }}">Previous</a>
</li>
{% else %}
<li class="page-item disabled">
<a class="page-link" href="#" tabindex="-1" aria-disabled="True">Previous</a>
</li>
{% endif %}
{% if jobs.number|add:'-4' > 1 %}
<li class="page-item"><a class="page-link" href="?page={{ jobs.number|add:'-5' }}">…</a></li>
{% endif %}
{% for i in jobs.paginator.page_range %}
{% if jobs.number == i %}
<li class="page-item active" aria-current="page">
<span class="page-link">
{{ i }}
<span class="sr-only">(current)</span>
</span>
</li>
{% elif i > jobs.number|add:'-5' and i < jobs.number|add:'5' %}
<li class="page-item"><a class="page-link" href="?page={{ i }}">{{ i }}</a></li>
{% endif %}
{% endfor %}
{% if jobs.paginator.num_pages > jobs.number|add:'4' %}
<li class="page-item"><a class="page-link" href="?page={{ jobs.number|add:'5' }}">…</a></li>
{% endif %}
{% if jobs.has_next %}
<li class="page-item">
<a class="page-link" href="?page={{ jobs.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>
<!--end of Pagination-->
</div>
</div>
想法是将关键字和位置传递给上下文。
def individual_home(request):
if request.method == 'GET':
keyword = request.GET.get('keywords')
print(keyword)
location = request.GET.get('location')
print(location)
ind = IndividualProfile.objects.get(user_id=request.user.id)
details = companyjob.objects.filter(
Q(job_title=keyword) | Q(qualification=keyword) | Q(skills_required=keyword) | Q(job_location=location) & Q(closing_date__gte=datetime.date.today()))
if details:
print(details)
count = details.count()
paginator = Paginator(details, 3)
page_number = request.GET.get('page')
page_obj = paginator.get_page(page_number)
return render(request, "individual_home.html",
{'keyword':keyword,'location':location,'jobs': page_obj,'count': count, 'ind': ind})
else:
return redirect("individual_homes")
像这样更改页码。
<!--Pagination-->
<nav aria-label="Page navigation example">
<ul class="pagination justify-content-center">
{% if jobs.has_previous %}
<li class="page-item">
<a class="page-link" href="?page={{ jobs.previous_page_number }}&keywords={{ keyword }}&location={{ location }}">Previous</a>
</li>
{% else %}
<li class="page-item disabled">
<a class="page-link" href="#" tabindex="-1" aria-disabled="True">Previous</a>
</li>
{% endif %}
{% if jobs.number|add:'-4' > 1 %}
<li class="page-item"><a class="page-link" href="?page={{ jobs.previous_page_number }}&keywords={{ keyword }}&location={{ location }}">…</a></li>
{% endif %}
{% for i in jobs.paginator.page_range %}
{% if jobs.number == i %}
<li class="page-item active" aria-current="page">
<span class="page-link">
{{ i }}
<span class="sr-only">(current)</span>
</span>
</li>
{% elif i > jobs.number|add:'-5' and i < jobs.number|add:'5' %}
<li class="page-item"><a class="page-link" href="?page={{ i }}&keywords={{ keyword }}&location={{ location }}"">{{ i }}</a></li>
{% endif %}
{% endfor %}
{% if jobs.paginator.num_pages > jobs.number|add:'4' %}
<li class="page-item"><a class="page-link" href="?page={{ jobs.number|add:'5' }}&keywords={{ keyword }}&location={{ location }}">…</a></li>
{% endif %}
{% if jobs.has_next %}
<li class="page-item">
<a class="page-link" href="?page={{ jobs.next_page_number }}&keywords={{ keyword }}&location={{ location }}">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>
<!--end of Pagination-->