[英]Creating objects/functions within Jinja to better re-use code
我目前正在一个实践博客网站上,以了解有关Web开发的更多信息,并且我正在使用Flask。
人们可以在我的网站上创建博客文章,并查看其他人的文章。 显然,我想使我的代码尽可能地可重用。 因此,现在,根据页面的不同,我会在routes.py中抓取一些博客文章,然后将它们传递到许多不同的页面(例如,主页,个人资料页面,搜索页面)中。
每个页面都有自己的模板,因为它们看起来都不同。 但是,即使博客文章本身可能有所不同,用于显示博客文章的代码在所有站点中也相同。 Jinja中有什么方法可以创建对象或函数(例如render_as_blog_posts()),我可以将其传递到博客帖子中并在模板中运行? 例如:
route.py
def profile():
blog_posts=profile_blog_posts
return render_template("profile.html",posts=blog_posts)
def search():
blog_posts=search_blog_posts
return render_template("search.html",posts=blog_posts)
profile.html:
<html>
<title>Profile</title>
{{ render_as_blog_posts(blog_posts) }}
</html>
search.html:
<html>
<title>Search</title>
{{ render_as_blog_posts(blog_posts) }}
</html>
我想,您正在寻找Jinja2的“模板继承”功能: https : //jinja.palletsprojects.com/en/2.10.x/templates/#template-inheritance
基本上,您可以通过不同的方式实现所需的目标:
blocks
定义为定制点。 然后,您可以extend
此模板并以特定于派生模板的方式填充块(请参见提供的链接中的示例) 模板导入: https : //jinja.palletsprojects.com/en/2.10.x/templates/#import更具体的功能,看起来与python的功能完全相同。 您可以定义包含一套特殊的模板的宏 ,然后import
此模板到你的profile.html
或search.html
:
{% import 'commmon_functions.html' as common %}
然后,您可以将此文件中的函数作为common
命名空间的一部分进行引用:
{{ common.render_as_blog_posts(blog_posts) }}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.