在同一蓝图中允许多个子域

时间:2016-11-26 03:10:19

标签: python flask subdomain blueprint

我需要在此蓝图中允许两个子域。在这种情况下,pt和br。我怎样才能做到这一点?据我所知,我只能有一个子域参数。我想将这个功能用于两种语言[pt和br]。

url_for()

我想避开dynamic子域名,因为我不想更改所有import pandas as pd df = pd.read_csv("test.csv", skiprows=[0], usecols=[0,3,4,5], index_col=False) df # Date T3 T4 T5 #0 105/11/01 9.30 9.36 9.27 #1 105/11/02 9.26 9.42 9.23 #2 105/11/03 9.30 9.30 9.20

1 个答案:

答案 0 :(得分:6)

不要定义当前正在执行此操作的蓝图的前缀和子域名,如下所示进行定义:

mod = Blueprint('landing', __name__)

然后,只需注册蓝图两次,每个子域一个:

app.register_blueprint(mod, subdomain='pt', url_prefix='/')
app.register_blueprint(mod, subdomain='br', url_prefix='/')

修改

如OP所述,给定解决方案的问题在于,在模板中使用url_for时,第一个注册的蓝图将具有优先权。

快速解决方法可能是在注册时做这样的事情:

app.register_blueprint(mod, subdomain='br')
mod.name = 'landing_pt'    
app.register_blueprint(mod, subdomain='pt')

请注意,这样做的顺序很重要(首先注册一个,然后更改名称,然后注册另一个)。

然后,要让url_for按预期在两个子域中工作,请务必使用url_for('.index'),而不是url_for('landing.index'),而不是select TABLE_NAME, COLUMN_NAME, CONSTRAINT_NAME from INFORMATION_SCHEMA.COLUMNS, INFORMATION_SCHEMA.KEY_COLUMN_USAGE

通过更改第二次注册的蓝图名称,我们欺骗Flask,认为这是一个不同的蓝图。

建议欢迎更好地采用这种肮脏的解决方法。