我承认这个问题是在一年前提出的,但问题仍然存在。Flask-Themes 到目前为止还不起作用..因此我必须自己找到一种方法来完成它。
其实这是一个微不足道的过程。
一个干净的结构是以后维护的必要条件(即使它是一个作者的项目)。
因此,尝试调整 Özcan 的结构,以获得多模板配置,我们可以有这样的结构:
/python
_ _ _ _app.py
_ _ _ _config.py
______/templates
________________/default
_ _ _ _ _ _ _ _ _ _ _ _index.html
________________/custom
_ _ _ _ _ _ _ _ _ _ _ _index.html
我不知道他的应用程序文件上有什么代码,但我想在app.py中有这样的东西:
from flask import Flask, render_template
import config
app = Flask(__name__, template_folder='/templates/' + config.Config.ACTIVE_THEME)
@app.route('/')
def main():
return render_template('index.html')
if '__name__' == '__main__':
app.run()
config.py 是这样的:
class Config(object):
ACTIVE_THEME='default'
模板文件夹中的默认主题 index.html可能如下所示:
<head>
# We have the ability to include the css from the current path instead of having a separate static folder
<style type='text/css'> {% include 'style.css' %} </style>
</head>
<body>
<h1> This is the "default" theme </h1>
</body>
而自定义主题 index.html 如下所示:
<head>
<style type='text/css'> {% include 'style.css' %} </style>
</head>
<body>
<h1> This is the "custom" theme </h1>
</body>
现在,访问127.0.0.1:5000
将显示“这是“默认”主题”,因为实际上已加载默认主题。
要更改此设置,您必须按以下方式编辑配置文件:
class Config(object):
# Set ACTIVE_THEME from default to custom
ACTIVE_THEME='custom'
保存更改,重新加载页面,您应该会看到“这是“自定义”主题”。
这是一个非常基本的“hack”,但如果您对您的应用程序很认真,我建议您使用蓝图,除此之外,还有必须维护 2 个配置文件而不是一个配置文件的不便。
为了避免这些问题,我使用了蓝图和应用程序的良好结构。
例如,我在应用程序初始化后定义配置,所以不是这样:
import config
app = Flask(__name__, template_folder=/templates/' + config.Config.ACTIVE_THEME)
它是这样的:
app = Flask(__name__)
app.config.from_object('config.Config')
在包含所有视图的单独文件中,顶部的以下行:
# doing an "import app" would raise an error because of it being a circular import
import config
active_theme = config.Config.ACTIVE_THEME
# Watch out for the second argument as it seems to add a prefix to successive defined arguments. In fact you could swap the "themes" part to it and remove it from the third argument, but I prefer to leave it like this to avoid future headaches.
posts = Blueprint('posts', '', template_folder='templates/' + active_theme + '/post')
它还可以通过其他方式进行扩展,例如用户会话、数据库配置等。
希望这可以帮助某人。