DJANGO: сохранить нумерацию страниц и фильтры после сохранения формы - PullRequest
0 голосов
/ 23 января 2020

Я пытаюсь отрисовать существующее представление страницы (с выбранными фильтрами и нумерацией страниц) после сохранения формы.

Это работало до реализации разбиения на страницы, но теперь я немного застрял.

Я использую 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 }}">&laquo;</a></li>
    {% else %}
    <li class="disabled"><span>&laquo;</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 }}">&raquo;</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 }}">&raquo;</a></li>
        {% else %}
        <li><a href="?page={{ post_list.next_page_number }}">&raquo;</a></li>
        {% endif %} {% else %}
        <li class="disabled"><span>&raquo;</span></li>
        {% endif %}
</ul>


Я попытался создать тот же контекст, что и в item_list , но, к сожалению, это не работает.

Не могли бы вы помочь мне здесь?

Если понадобятся какие-либо другие детали, пожалуйста, дайте мне знать!

Большое спасибо, Александру

...