Flask 在烧瓶中对长页进行分页

Flask 在烧瓶中对长页进行分页,flask,jinja2,flask-flatpages,Flask,Jinja2,Flask Flatpages,我是python新手,我正在尝试使用Flask框架创建一个网站 我正在使用FlatPages扩展来呈现特定目录中的标记文件,并且我想对页面进行分页。为了防止长页面和无限滚动,我想剪切页面并在多个页面上呈现每个页面。我在想,一个简单的方法就是剪切html标记,比如 我不确定我是否足够清楚,主要思想是一篇多部分文章或一系列文章 我只找到了关于使用数据库和分页查询结果的答案 我不知道这是在python/flask中还是在jinja模板中完成的 编辑: 正如我在这里的评论中提到的,我使用它来呈现我的.

我是python新手,我正在尝试使用Flask框架创建一个网站

我正在使用
FlatPages
扩展来呈现特定目录中的标记文件,并且我想对页面进行分页。为了防止长页面和无限滚动,我想剪切页面并在多个页面上呈现每个页面。我在想,一个简单的方法就是剪切html标记,比如

我不确定我是否足够清楚,主要思想是一篇多部分文章或一系列文章

我只找到了关于使用数据库和分页查询结果的答案

我不知道这是在python/flask中还是在jinja模板中完成的


编辑: 正如我在这里的评论中提到的,我使用它来呈现我的
.md
文件:

pages = FlatPages(app)

@app.route('/')
def index():
    # Articles are pages with a publication date
    articles = (p for p in pages if 'published' in p.meta)
    # Show the 10 most recent articles, most recent first.
    latest = sorted(articles, reverse=True,
                    key=lambda p: p.meta['published'])
    return render_template('articles.html', articles=latest[:10])

@app.route('/<path:path>/')
def page(path):
    page = pages.get_or_404(path)
    template = page.meta.get('template', 'flatpage.html')
    return render_template(template, page=page)
pages=FlatPages(应用程序)
@应用程序路径(“/”)
def index():
#文章是带有发布日期的页面
文章=(如果在p.meta中“发布”,则页中的p代表p)
#显示最近的10篇文章,最近的第一篇。
最新=已排序(文章,反向=真,
key=lambda p:p.meta['published'])
返回呈现模板('articles.html',articles=latest[:10])
@应用程序路径(“/”)
def页面(路径):
页面=页面。获取_或_404(路径)
template=page.meta.get('template','flatpage.html')
返回渲染模板(模板,页面=页面)

我想我需要修改的就是这条路线(或flatpage模板),对
页面进行分页。首先,您需要限制您的数据库请求,这样,如果您的结果是2000条记录,那么您只希望看到前50条记录,您可以在查询结束时执行类似操作

"order by TableName.SomeID limit " + str(int(CurrentPage) * 50 - 50) + ", 50;"
以下是有关限制和偏移的更多信息:

无论如何,请使用CurrentPage获取偏移量,以便在第1页上,限制看起来像此限制0,50-意味着给我50行,从第0行开始。在第2页,限制看起来像这个限制50,50-意思是给我50行,从第50行开始。此外,还需要在其中保留ORDERBY子句,以便在分页时结果保持一致的顺序

您还需要不受限制地运行另一个查询,以便知道总共有多少页。此查询只需选择count(*)即可完成。下面是我如何计算该查询的总页数

    # 50 for the number of results per page
    TotalPages = (ResultsCount[0]['Count(*)'] // 50)  
    # find out if there is a remainder of results if so add one more page
    if((ResultsCount[0]['Count(*)'] % 50) > 0):
        TotalPages +=1
现在你的金甲2应该是这样的

{% if TotalPages > 1 and CurrentPage < 15 %}
{% for Item in range(TotalPages) %}
{% if loop.index == CurrentPage %}
        <div style="border: 1px solid; border-color: #1C5F8B; width: 22px; height: 16px; text-align: center; float: left; margin: 2px; padding-top: 2px"><b>{{ loop.index }}</b></div>
    {% elif loop.index < 15 %}
        <a style="cursor: pointer; color: #000000" href="/class/getdata?CurrentPage={{ loop.index }}"><div style="border: 1px solid; width: 22px; height: 16px; text-align: center; float: left; margin: 2px; padding-top: 2px">{{ loop.index }}</div></a>
    {% elif loop.index == 15 %}
        <a style="cursor: pointer; color: #000000" href="/class/getdata?CurrentPage={{ loop.index }}"><div style="border: 1px solid; width: 28px; height: 16px; text-align: center; float: left; margin: 2px; padding-top: 2px">Next</div></a>
    {% endif %} 
{% endfor %}
{% elif TotalPages > 1 and (CurrentPage + 15) < TotalPages %}
    {% for Item in range(15 * CurrentPage) %}
        {% if loop.index0 == (CurrentPage - 15) %}
            <a style="cursor: pointer; color: #000000" href="/class/getdata?CurrentPage={{ loop.index }}"><div style="border: 1px solid; width: 28px; height: 16px; text-align: center; float: left; margin: 2px; padding-top: 2px">Prev</div></a>
        {% elif loop.index == CurrentPage %}
            <div style="border: 1px solid; border-color: #1C5F8B; width: 22px; height: 16px; text-align: center; float: left; margin: 2px; padding-top: 2px"><b>{{ loop.index }}</b></div>
        {% elif loop.index > CurrentPage and loop.index < (CurrentPage + 15) and loop.index < TotalPages %}
            <a style="cursor: pointer; color: #000000" href="/class/getdata?CurrentPage={{ loop.index }}"><div style="border: 1px solid; width: 22px; height: 16px; text-align: center; float: left; margin: 2px; padding-top: 2px">{{ loop.index }}</div></a>
        {% elif loop.index == (CurrentPage + 15) and loop.index < TotalPages %}
            <a style="cursor: pointer; color: #000000" href="/class/getdata?CurrentPage={{ loop.index }}"><div style="border: 1px solid; width: 28px; height: 16px; text-align: center; float: left; margin: 2px; padding-top: 2px">Next</div></a>
        {% elif loop.index == TotalPages and (CurrentPage + 15) > TotalPages %}
            <a style="cursor: pointer; color: #000000" href="/class/getdata?CurrentPage={{ loop.index }}"><div style="border: 1px solid; width: 22px; height: 16px; text-align: center; float: left; margin: 2px; padding-top: 2px">{{ loop.index }}</div></a>
        {% endif %} 
    {% endfor %}
    {% elif TotalPages > 1 %}
        {% for Item in range(15 * CurrentPage) %}
            {% if (loop.index - 1) == (CurrentPage - 15) %}
                <a style="cursor: pointer; color: #000000" href="/class/getdata?CurrentPage={{ loop.index }}"><div style="border: 1px solid; width: 28px; height: 16px; text-align: center; float: left; margin: 2px; padding-top: 2px">Prev</div></a>
            {% elif loop.index == CurrentPage %}
                <div style="border: 1px solid; border-color: #1C5F8B; width: 22px; height: 16px; text-align: center; float: left; margin: 2px; padding-top: 2px"><b>{{ loop.index }}</b></div>
            {% elif loop.index > (TotalPages - 15) and loop.index < (CurrentPage + 15) and loop.index < TotalPages %}
                <a style="cursor: pointer; color: #000000" href="/class/getdata?CurrentPage={{ loop.index }}"><div style="border: 1px solid; width: 22px; height: 16px; text-align: center; float: left; margin: 2px; padding-top: 2px">{{ loop.index }}</div></a>
            {% elif loop.index == TotalPages and (CurrentPage + 15) > TotalPages %}
                <a style="cursor: pointer; color: #000000" href="/class/getdata?CurrentPage={{ loop.index }}"><div style="border: 1px solid; width: 22px; height: 16px; text-align: center; float: left; margin: 2px; padding-top: 2px">{{ loop.index }}</div></a>
            {% endif %} 
        {% endfor %}
    {% endif %}
{%如果TotalPages>1且CurrentPage<15%}
{范围(TotalPages)%%中的项的百分比}
{%if loop.index==CurrentPage%}
{{loop.index}}
{%elif loop.index<15%}
{%elif loop.index==15%}
{%endif%}
{%endfor%}
{%elif TotalPages>1和(CurrentPage+15)CurrentPage和loop.index<(CurrentPage+15)和loop.indexTotalPages%}
{%endif%}
{%endfor%}
{%elif TotalPages>1%}
{范围(15*CurrentPage)%中的项的百分比}
{%if(loop.index-1)==(CurrentPage-15)%}
{%elif loop.index==CurrentPage%}
{{loop.index}}
{%elif loop.index>(TotalPages-15)和loop.index<(CurrentPage+15)以及loop.indexTotalPages%}
{%endif%}
{%endfor%}
{%endif%}

希望这有帮助

最简单的方法是在中启用(或者,您可以自己启用或维护TOC):

然后,您可以使用一些CSS来设置选定元素的样式:

h2,p{
显示:无;
}
/*将来某个时候
您将能够隐藏摘要
使用:has伪选择器。
现在,您必须使用一些JavaScript
要收听,请单击TOC上的事件*/
h1:has(~h2:target),h1:has(~h2:target)+p{
显示:无;
}
h1,h1:目标+p,
h2:目标,h2:目标+p{
显示:块;
}
/*TOC样式-与整体无关*/
保险商实验室{
边框:1px纯色灰色;
列表样式类型:无;
保证金:0;
填充物:1em.25em;
}
李{
显示:内联块;
保证金:0;
填充:0;
}
李:以前{
颜色:#777;
内容:“:”;
显示:内联块;
边缘:0.5em;
}
李:第一个孩子{
左边距:0;
}
李:第一个孩子:以前{
内容:无;
}
这是我的文章 一些介绍性内容
有几行
在里面

第一节 这个内容最有趣的地方是什么?它存在

第二节
更多内容、内容、内容、内容、内容。

您是要为文章列表(单独的
.md
文件)分页,还是为单个文章/
.md
文件分页?应该是每个
.md
文件。想一想一个很长的教程(我所有的
.md
文件都是),我想在显示时打断它们。您希望它们在服务器上分页,还是可以在客户端分页?(换句话说,你是需要为每个部分单独加载页面,还是只需要更小的感知页面大小?)我认为它可以在客户端(我已经在一些js库中查找过了,但到目前为止没有运气)。这是我需要的感知页面大小更小,在屏幕上将页面分成更小的部分。这看起来像是一个网站中的演示。嗨。谢谢你的回复,但这绝对不是我想要的。我网站的所有页面都是
.md
文件,我会这样显示它们:我在做什么
FLATPAGES_MARKDOWN_EXTENSIONS = ['markdown.extensions.toc']