简单的烧瓶主题机制

flask-themer的Python项目详细描述


PyPIPyPI - LicenseGitHub Workflow Status

烧瓶加热机

flask应用程序的简单主题支持。在

Flask Themer的灵感来自于(似乎)废弃的flask-themes项目, 但它是为py3.7+(或带有dataclasses的3.6)从头开始编写的 后端口)。然而,它与烧瓶主题和 不寻求成为。烧瓶匠试图对你如何 实际上,你的项目和它的主题,不需要一个 特定元数据格式/文件。在

烧瓶热释放遵循Semantic Versioning。 烧瓶Themer有100%的测试覆盖率,并且认为低于以下是一个错误 100%。在

安装

PyPi安装最新版本:

pip install flask-themer

或从github获取最新开发版本:

^{pr2}$

快速启动

烧瓶的用法通常是非常基本的,一旦设置好,你可能就不需要了 再碰一次。让我们快速启动。注意我们如何导入render_templateflask_themer而不是flask。在

我们的app.py如下所示:

fromflaskimportFlaskfromflask_themerimportThemer,render_templateapp=Flask(__name__)themer=Themer(app)@themer.current_theme_loaderdefget_current_theme():# This is where you would look up the current user's theme if one was# logged in, for example.return'default'@app.route('/')defhello_world():returnrender_template('hello.html')

在它旁边有一个名为themes的目录,其中一个名为 default里面。我们的themes/default/hello.html如下所示:

Hello world!

就这样!默认情况下,Flask Themer将在 你的项目,并假设其中的所有目录都是主题。你可以 使用THEMER_DEFAULT_DIRECTORY更改它查找的目录,或指定 模板加载器显式覆盖默认值:

fromflask_themerimportThemer,FileSystemThemeLoaderapp=Flask(__name__)themer=Themer(app,loaders=[FileSystemThemeLoader(app,os.path.join(app.root_path,'also_themes'))])

使用模板中的主题

一旦设置了Flask Themer,theme()theme_static()(就像烧瓶主题)。这些方法查找当前 活动主题并在该主题中查找给定的路径,返回一个特殊的 Jinja可以用来加载它的路径。在

{% extends theme("base.html") %}

{% block header %}
    {{ super() }}
    <link rel="stylesheet" href="{{ theme_static("bootstrap.css") }}">
{% endblock %}

主题加载器

{emmem发现主题是什么 有。您可以创建一个自定义加载器来从ZIP文件中获取主题,或者 例如数据库。通常,如果您创建一个新的ThemeLoader,您还将 需要创建一个新的Jinjatemplate loader以便Jinja知道如何 阅读单个模板。让我们做一个非常小的例子,只加载一个 压缩文件中的单个主题。在

fromzipfileimportZipFilefromflask_themerimportThemeLoader,Themefromjinja2.loadersimportBaseLoader,TemplateNotFoundclassZipFileTemplateLoader(BaseLoader):def__init__(self,*args,archive,**kwargs):super().__init__(*args,**kwargs)self.archive=archivedefget_source(self,environment,template):try:return(self.archive.read(template),None,False)exceptKeyError:raiseTemplateNotFound(template)classZipFileThemeLoader(ThemeLoader):def__init__(self,path_to_zip):self.archive=ZipFile(path_to_zip)@propertydefthemes(self):yieldTheme(name='my_dumb_theme',theme_loader=self,jinja_loader=ZipFileTemplateLoader(archive=self.archive),)defget_static(self,theme,path):returnself.archive.read(path)

为了使用新的装载机,我们更新了之前的示例:

...themer=Themer(app,loaders=[ZipFileThemeLoader('my_dumb_theme.zip')])...

很简单对吧?您可以看到我们如何轻松地创建一个加载程序来加载 从存档文件中加载多个主题,或从 数据库。在

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java@Resource和@Autowired返回null,带有方面日志   如何从Java算法的无序字符串中检索原始字符串   如何在Java文本区域中显示多行扫描仪输入   java如何迭代一个arraylist并将符合条件的某些对象复制到另一个arraylist?   在java中存储矩阵并进行比较   使用BND工具的java Gradle多构建平面独立项目   读取java时文件名中的随机字符   java JDBC准备的语句UTF8   java如何在web的子项目中包含源程序包。主项目中的xml   Spring MVC、Tomcat和mysql的java开发环境   java Mous类OnClick侦听器错误   左起第二斜杠后的java剪切字符串   java TestNG处理外部系统依赖关系,需要澄清   java如何在JUnit测试类中注入多个EJB   java无法将“”解析为整数,然后退出   具有HashMap返回空HashMap的java装饰器设计模式   apache和Java之间的“解密失败或坏记录mac”   java在运行基于Spring的应用程序时如何解析占位符?   java swing/batik的奇怪行为   tostring Long在java中不会转换为字符串