如何在Airium中实现类似Django的Master Template功能?
在Airium中实现类似Django Master Template的功能
核心结论
Airium本身没有内置“master template”的概念,但借助Python的类继承或函数封装特性,完全可以实现和Django母版页一致的效果——抽象通用页面框架,统一全站外观。
实现方法
方法1:类继承(推荐,适合复杂站点)
定义一个基础母版类,封装所有页面的通用HTML结构(如头部、导航栏、页脚),具体页面类继承该母版类后,仅需重写内容区域的逻辑即可。
示例代码:
import airium class MasterPage: def __init__(self, page_title="My Site"): self.a = airium.Airium() self.page_title = page_title # 生成通用页面框架 with self.a.html(lang="zh-CN"): with self.a.head(): self.a.title(self.page_title) self.a.link(rel="stylesheet", href="/static/css/style.css") # 可添加其他通用资源:meta标签、全局JS等 with self.a.body(): # 通用导航栏 with self.a.nav(): self.a.a(href="/")("首页") self.a.a(href="/about")("关于我们") # 内容占位:由子类重写填充专属内容 self.content() # 通用页脚 with self.a.footer(): self.a.p("© 2024 My Site All Rights Reserved") def content(self): # 子类必须重写此方法,实现页面专属内容 pass # 具体页面类:首页 class HomePage(MasterPage): def __init__(self): super().__init__(page_title="首页 - My Site") def content(self): with self.a.main(): self.a.h1("欢迎访问我的站点") self.a.p("这是首页的专属内容区域") # 渲染并输出页面 home_page = HomePage() print(home_page.a)
方法2:函数封装(适合简单站点)
把通用页面框架封装成函数,接受页面标题、内容生成函数作为参数,在函数内部拼接通用结构与自定义内容。
示例代码:
import airium def render_master(page_title, content_func): a = airium.Airium() with a.html(lang="zh-CN"): with a.head(): a.title(page_title) a.link(rel="stylesheet", href="/static/css/style.css") with a.body(): # 通用导航栏 with a.nav(): a.a(href="/")("首页") a.a(href="/about")("关于我们") # 调用内容函数,生成页面专属内容 content_func(a) # 通用页脚 with a.footer(): a.p("© 2024 My Site All Rights Reserved") return str(a) # 定义首页内容生成逻辑 def home_content(a): with a.main(): a.h1("欢迎来到首页") a.p("这是首页的自定义内容") # 渲染首页 home_html = render_master("首页 - My Site", home_content) print(home_html)
额外说明
这种实现方式完全依托Python原生特性,相比Django模板系统,逻辑更灵活——可以直接在代码中使用Python的条件判断、循环、变量运算等语法,无需额外学习模板标签,适合熟悉Python的开发者。
内容的提问来源于stack exchange,提问作者arennuit
相关产品推荐
相关产品推荐

