0

enter image description here Я хочу отобразить три страницы на одной странице, используя фляж-пагинат. Проблема состоит в том, что три страницы являются «синхронизированными» в смысле, что нажатие «Следующая страница» одной разбивки на страницы влияет на другую разбивку на страницы. Я пытался использовать разные названия страниц для различной разбивки на страницы, но до сих пор что-то не хватает. Я не нашел НИЧЕГО о множественной разбивке на страницы, пожалуйста, помогите мне в решении этой проблемы. ПОЖАЛУЙСТА, СМОТРЕТЬ СМОТРЕТЬ В КАРТИНУ, КОТОРАЯ ПРИНИМАЕТСЯ ЛУЧШЕ ПОНИМАТЬ. Обращаем ваше внимание на то, что я написал книгу Мигеля Грингберга при создании этого приложения, но он рассматривает только отдельные фрагменты, а не несколько. https://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-i-hello-worldКолбация многостраничных страниц на одной странице Страница с использованием колбу-paginate 0.4.5

У меня есть страница '' discover.html '' с 3 списками нумерованных элементов:

<div class="discover-content"> 

     <div class="contests-list"> 
      {% with projects=contests, pagination=contests_pagination, page='main.discover', fragment='#contests' %} 
       <h2>Most Recent Contests</h2> 
       {% include '_contests.html' %} 
      {% endwith %} 
     </div> 

     <div class="skills-list"> 
      {% with skills=skills, pagination=skills_pagination, page='main.discover', fragment='#skills' %} 
       <h2>Skills</h2> 
       {% include '_skills.html' %} 
      {% endwith %} 
     </div> 

     <div class="ideas-list"> 
      {% with projects=ideas, pagination=ideas_pagination, page='main.discover', fragment='#ideas' %} 
       <h2>Most Recent Ideas</h2> 
       {% include '_ideas.html' %} 
      {% endwith %} 
     </div> 

</div> 

Где каждый список похож на следующий '' _skills.html '':

{% import "_macros.html" as macros %} 

<ul class="skills"> 
    {% for skill in skills %} 
     {% if skill.name %} 
     <li class="skill">{{ skill.name }}</li> 
     {% endif %} 
    {% endfor %} 
</ul> 

{% if pagination %} 
    <div class="pagination"> 
     {{ macros.pagination_widget(pagination, page, fragment=fragment) }} 
    </div> 
{% endif %} 

файл '' _macros.html '' работает таким образом:

{% macro pagination_widget(pagination, endpoint, fragment='') %} 
<ul class="pagination"> 
    <li{% if not pagination.has_prev %} class="disabled"{% endif %}> 
     <a href="{% if pagination.has_prev %}{{ url_for(endpoint, page=pagination.prev_num, **kwargs) }}{{ fragment }}{% else %}#{% endif %}"> 
      &laquo; 
     </a> 
    </li> 
    {% for p in pagination.iter_pages() %} 
     {% if p %} 
      {% if p == pagination.page %} 
      <li class="active"> 
       <a href="{{ url_for(endpoint, page = p, **kwargs) }}{{ fragment }}">{{ p }}</a> 
      </li> 
      {% else %} 
      <li> 
       <a href="{{ url_for(endpoint, page = p, **kwargs) }}{{ fragment }}">{{ p }}</a> 
      </li> 
      {% endif %} 
     {% else %} 
     <li class="disabled"><a href="#">&hellip;</a></li> 
     {% endif %} 
    {% endfor %} 
    <li{% if not pagination.has_next %} class="disabled"{% endif %}> 
     <a href="{% if pagination.has_next %}{{ url_for(endpoint, page=pagination.next_num, **kwargs) }}{{ fragment }}{% else %}#{% endif %}"> 
      &raquo; 
     </a> 
    </li> 
</ul> 
{% endmacro %} 

мнение связано на страницу «» discover.html «» заключается в следующем:

@main.route('/discover', defaults={'page_c': 1, 'page_i': 1, 'page_s': 1}, methods=['GET', 'POST']) 
@main.route('/discover/page_c/<int:page_c>/page_i/<int:page_i>/page_s/<int:page_s>', methods=['GET', 'POST']) 
def discover(page_c, page_i, page_s): 

    contests_page = request.args.get(page_c, 1, type=int) 
    contests_pagination = Project.query.filter_by(project_type='contest').order_by(Project.timestamp.desc()).paginate(
     contests_page, per_page=current_app.config['CONTESTS_PER_PAGE'], error_out=False) 
    contests = contests_pagination.items 

    ideas_page = request.args.get(page_i, 1, type=int) 
    ideas_pagination = Project.query.filter_by(project_type='idea').order_by(Project.timestamp.desc()).paginate(
     ideas_page, per_page=current_app.config['IDEAS_PER_PAGE'], error_out=False) 
    ideas = ideas_pagination.items 

    skills_page = request.args.get(page_s, 1, type=int) 
    skills_pagination = Skill.query.order_by(Skill.name.desc()).paginate(
     skills_page, per_page=current_app.config['SKILLS_PER_PAGE'], error_out=False) 
    skills = skills_pagination.items 


    return render_template('discover.html', contests=contests, ideas=ideas, skills=skills, 
          contests_pagination=contests_pagination, ideas_pagination=ideas_pagination, 
          skills_pagination=skills_pagination) 

ответ

1

Наиболее ясный способ справиться с этим с асинхронными запросами (Ajax). У вас будет три отдельных конечных точки для трех списков элементов, каждая из которых будет разбита на отдельные страницы. Основная HTML-страница будет выдавать Ajax-запросы этим трем конечным точкам, а перемещение между страницами в одном списке не должно затрагивать другие два списка.

Если вы хотите продолжать делать это как одну страницу с тремя списками в ней, то вам нужно убедиться, что ссылки на страницы во всех списках содержат правильные номера страниц для всех трех списков. Например, если вы просматриваете страницы 1, 2 и 3 соответственно в этих трех списках, и вы попадаете на следующую страницу во втором списке, эта ссылка следующей страницы должна начинаться с /discover/page_c/1/page_i/3/page_s/3, так что первый и третий списки остаются на их страницах 1 и 3, а второй список перемещается со страницы 2 на страницу 3. Вам потребуется гораздо больше сложностей в вашем макросе, ему нужно знать номера страниц из трех списков и какой из списков меняется.