gpt4 book ai didi

python - webapp2,Jinja2 : how to cut large html file into multiple html files

转载 作者:行者123 更新时间:2023-11-28 22:02:55 26 4
gpt4 key购买 nike

当我写博客时,我喜欢将每篇博文分成自己的 .html 文件(这样可以吗?)

这可以防止文件变得太大,并且可以在需要时轻松返回并编辑以前写的博客文章。

有时博文会包含 css/js/ajax/template 变量。

但是在我的网站上,我喜欢一个页面上的所有博文(这样我就可以滚动浏览所有博文,而不是为每篇博文转到单独的页面)

这是一个包含两篇博文的 html 文件:

{% extends "base.html" %}
{% block blog_posts %}
<!-- links/targest for the side menu to jump to a post -->
<li><a href="#post2">Post2 - April 2012</a></li>
<li><a href="#post1">Post1 - Feb 2012</a></li>
{% endblock %}

{% block content %}

<div id="post1">
spam1 blah blah
</div>

<div id="post2">
spam2
</div>
{% endblock %}

在 base.html 中我有类似的东西:

<div id="content-container">
<div id="section-navigation">
<ul>
{% block blog_posts %}
{% endblock %}
</ul>
</div>
<div id="content">
{% block content %}{% endblock %}
</div>
</div>

对我来说,使用 webapp2 和 jinja2 将这些博客文章拆分成单独的文件的最佳方法是什么?

例如blog1.html 可能看起来像:

{% block blog_posts %}
<!-- links/targest for the side menu to jump to a post -->
<li><a href="#post1">Post1 - Feb 2012</a></li>
{% endblock %}

{% block content %}

<div id="post1">
spam1 blah blah
</div>
{% endblock %}

(我希望链接和博文以正确的顺序显示在网站上)

我可以想到一种方法,其中 post2 扩展了 post1.html,post3 扩展了 post2.html 等,但我更愿意展开更多

“Henry 和 Kafura 于 1981 年引入了基于信息流的软件结构度量[2],该度量作为扇入和扇出的函数来衡量复杂性。”

谢谢

最佳答案

@robert king,您的设计将数据直接嵌入到模板中。模板应该只包含 View 的蓝图,并且每次都应该使用从主代码生成的新数据来呈现它们。我在这里模拟这个过程(经过编辑以说明使用循环提取帖子标题,以及单个帖子的显示。):

import jinja2

# NOTE: in this template there is no data relating to specific posts.
# There are only references to data structures passed in from your main code
page_template = jinja2.Template('''
<!-- this is a navigation block that should probably be in base.html -->
{% block blog_posts %}
<!-- links/targets for the side menu to jump to a post -->
{% for post in posts %}
<li><a href="{{ post.url }}">{{ post.title }}
- {{ post.date }}</a></li>
{% endfor %}
{% endblock %}

<!-- this is a content block that should probably be in page.html -->
{% block content %}
<div id="post">
<h1>{{ current.title }}</h1>
<h2>{{ current.date }}</h2>
<p>{{ current.content }}</p>
</div>
{% endblock %}
''')

# NOTE your main code would create a data structure such as this
# list of dictionaries ready to pass in to your template
list_of_posts = [
{ 'url' : '#post1',
'title' : 'My first post',
'date' : 'Feb 2012',
'content' : 'My first post is about Hello World.'},

{ 'url' : '#post2',
'title' : 'My second post',
'date' : 'Apr 2012',
'content' : 'My second post is about Foo Bar.'}
]

# Pass in a full list of posts and a variable containing the last
# post in the list, assumed to be the most recent.
print page_template.render(posts = list_of_posts,
current = list_of_posts[-1])

希望这对您有所帮助。

编辑 另请参阅我对关于 "Site fragments - composite views" 的问题的回答

关于python - webapp2,Jinja2 : how to cut large html file into multiple html files,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10369486/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com