Я пытаюсь отрисовать существующее представление страницы (с выбранными фильтрами и нумерацией страниц) после сохранения формы.
Это работало до реализации разбиения на страницы, но теперь я немного застрял.
Я использую Django, с django_filters и Paginator .
Это мой код:
views.py
def save_item_form(request, form, template_name):
data = dict()
if request.method == 'POST':
if form.is_valid():
form.save()
data['form_is_valid'] = True
user_list = item.objects.all()
user_filter = UserFilter(request.GET, queryset=user_list)
user_list = user_filter.qs
page = request.GET.get('page', 5)
paginator = Paginator(user_list, 50)
try:
post_list = paginator.page(page)
except PageNotAnInteger:
post_list= paginator.page(1)
except EmptyPage:
post_list= paginator.page(paginator.num_pages)
context = {
'paginator': paginator,
'page':page,
'post_list': post_list,
'filter':user_filter
}
data['html_item_list'] = render_to_string('items/includes/partial_item_list.html', context)
else:
data['form_is_valid'] = False
context = {'form': form}
data['html_form'] = render_to_string(template_name, context, request=request)
return JsonResponse(data)
def item_list(request):
user_list = item.objects.order_by('-nom_projet').all()
user_filter = UserFilter(request.GET, queryset=user_list)
user_list = user_filter.qs
paginator = Paginator(user_list, 50) #50 posts in each page
page = request.GET.get('page')
try:
post_list = paginator.page(page)
except PageNotAnInteger:
# If page is not an integer deliver the first page
post_list = paginator.page(1)
except EmptyPage:
# If page is out of range deliver last page of results
post_list = paginator.page(paginator.num_pages)
context = {
'paginator': paginator,
'page':page,
'post_list': post_list,
'filter':user_filter
}
return render(request,
'items/item_list.html',
context)
item_list. html
{% for item in post_list %}
<tr>
<td>{{ item.type }}</td>
<td style="width: 150px">
<button type="button"
class="btn btn-warning btn-sm js-update-book"
data-url="{% url 'item_update' item.id %}">
<span class="glyphicon glyphicon-pencil"></span> Edit
</button>
<button type="button"
class="btn btn-danger btn-sm js-delete-book"
data-url="{% url 'item_delete' item.id %}">
<span class="glyphicon glyphicon-trash"></span> Delete
</button>
</td>
</tr>
{% empty %}
<tr>
<td colspan="8" class="text-center bg-warning">No entry</td>
</tr>
{% endfor %}
<ul class="pagination">
{% if post_list.has_previous %}
<li><a href="{{ request.get_full_path }}&page={{ post_list.previous_page_number }}">«</a></li>
{% else %}
<li class="disabled"><span>«</span></li>
{% endif %} {% for i in paginator.page_range %} {% if post_list.number == i %}
<li class="active"><span>{{ i }} <span class="sr-only">(current)</span></span>
</li>
{% elif i > post_list.number|add:'-4' and i
< post_list.number|add: '4' %} {% if 'type' in request.get_full_path %} <li><a href="{{ request.get_full_path }}&page={{ post_list.next_page_number }}">»</a></li>
{% else %}
<li><a href="?page={{ i }}">{{ i }}</a></li>
{% endif %} {% endif %} {% endfor %} {% if post_list.has_next %} {% if 'type' in request.get_full_path %}
<li><a href="{{ request.get_full_path }}&page={{ post_list.next_page_number }}">»</a></li>
{% else %}
<li><a href="?page={{ post_list.next_page_number }}">»</a></li>
{% endif %} {% else %}
<li class="disabled"><span>»</span></li>
{% endif %}
</ul>
Я попытался создать тот же контекст, что и в item_list , но, к сожалению, это не работает.
Не могли бы вы помочь мне здесь?
Если понадобятся какие-либо другие детали, пожалуйста, дайте мне знать!
Большое спасибо, Александру