如何使用Apache VirtualHost中的不同Flask模板目录
我想为我的flask站点上的用户提供不同的“外观”和内容,基于他们访问站点时使用的虚拟主机,而不复制整个代码树 例如,访问red.mysite.com将提供默认为白色的红色页面和“红色”内容 今天我可以使用Apache配置中的自定义静态树来使用css和图像,但是我也希望有一个自定义/模板树,这样我就可以将模板中的页面内容更改为“红色”版本 是否有一种方法可以从VirtualHost指令(如with/static)设置模板目录如何使用Apache VirtualHost中的不同Flask模板目录,apache,flask,mod-wsgi,Apache,Flask,Mod Wsgi,我想为我的flask站点上的用户提供不同的“外观”和内容,基于他们访问站点时使用的虚拟主机,而不复制整个代码树 例如,访问red.mysite.com将提供默认为白色的红色页面和“红色”内容 今天我可以使用Apache配置中的自定义静态树来使用css和图像,但是我也希望有一个自定义/模板树,这样我就可以将模板中的页面内容更改为“红色”版本 是否有一种方法可以从VirtualHost指令(如with/static)设置模板目录 <VirtualHost *:80> Server
<VirtualHost *:80>
ServerName mysite.com
ServerAdmin admin@mywebsite.com
WSGIScriptAlias / /var/www/mysite.wsgi
<Directory /var/www/mysite/>
Order allow,deny
Allow from all
</Directory>
Alias /static /var/www/mysite/static
<Directory /var/www/mysite/static/>
Order allow,deny
Allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
<VirtualHost *:80>
ServerName red.mysite.com
ServerAdmin admin@mywebsite.com
WSGIScriptAlias / /var/www/mysite.wsgi
<Directory /var/www/mysite/>
Order allow,deny
Allow from all
</Directory>
Alias /static /var/www/mysite/red/static
<Directory /var/www/mysite/red/static/>
Order allow,deny
Allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
格雷厄姆给我指出了正确的道路 我是这样做的: 已将conf更改为加载项processgroup
<VirtualHost *:80>
ServerName mysite.com
ServerAdmin admin@mywebsite.com
WSGIDaemonProcess default
WSGIProcessGroup default
WSGIScriptAlias / /var/www/mysite.wsgi
<Directory /var/www/mysite/>
Order allow,deny
Allow from all
</Directory>
Alias /static /var/www/mysite/static
<Directory /var/www/mysite/static/>
Order allow,deny
Allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
<VirtualHost *:80>
ServerName red.mysite.com
ServerAdmin admin@mywebsite.com
WSGIDaemonProcess red
WSGIProcessGroup red
WSGIScriptAlias / /var/www/mysite.wsgi
<Directory /var/www/mysite/>
Order allow,deny
Allow from all
</Directory>
Alias /static /var/www/mysite/red/static
<Directory /var/www/mysite/red/static/>
Order allow,deny
Allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
现在,任何使用“红色”URL的人都会看到红色/templates中的模板
Bill一个选项运行两次应用程序?他们已经运行了两个实例,因为mod_wsgi将在两个VirtualHost中分离实例。在每个VirtualHost的基础上重写配置的问题也是如此。顺便说一句,您应该考虑使用mod_wsgi的守护程序模式而不是嵌入式模式。问题是,您如何告诉Flask模板的目录是什么?假设使用守护程序模式,您可以导入mod_wsgi;instance=mod_wsgi.process_group并获取守护进程进程组的名称,然后使用该名称触发通知Flask使用不同的模板目录。我正在尝试避免复制整个应用程序树,以便更轻松地进行维护。将进程组名称传递给Flask并在代码中进行分支的想法听起来也很有趣——这方面有好的例子吗?
import mod_wsgi
instance = mod_wsgi.process_group
if instance == 'red':
app = Flask(__name__, template_folder='red/templates')
else:
app = Flask(__name__)