如何使用Apache VirtualHost中的不同Flask模板目录

如何使用Apache VirtualHost中的不同Flask模板目录,apache,flask,mod-wsgi,Apache,Flask,Mod Wsgi,我想为我的flask站点上的用户提供不同的“外观”和内容,基于他们访问站点时使用的虚拟主机,而不复制整个代码树 例如,访问red.mysite.com将提供默认为白色的红色页面和“红色”内容 今天我可以使用Apache配置中的自定义静态树来使用css和图像,但是我也希望有一个自定义/模板树,这样我就可以将模板中的页面内容更改为“红色”版本 是否有一种方法可以从VirtualHost指令(如with/static)设置模板目录 <VirtualHost *:80> Server

我想为我的flask站点上的用户提供不同的“外观”和内容,基于他们访问站点时使用的虚拟主机,而不复制整个代码树

例如,访问red.mysite.com将提供默认为白色的红色页面和“红色”内容

今天我可以使用Apache配置中的自定义静态树来使用css和图像,但是我也希望有一个自定义/模板树,这样我就可以将模板中的页面内容更改为“红色”版本

是否有一种方法可以从VirtualHost指令(如with/static)设置模板目录

<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__)