[PYTHON] Flask bascule automatiquement les répertoires de modèles entre le PC et le mobile

Exigences

Je veux que UserAgent détermine s'il s'agit d'un PC ou d'un smartphone et change le répertoire racine du modèle sans autorisation.

Par exemple, préparez un modèle comme celui-ci

template/ja/pc/index.html
template/ja/sp/index.html
template/ja/fp/index.html

En vue, je veux faire cela sans être conscient de l'appareil. Je veux que vous voyiez le pc ou le sp automatiquement.

return render_template('index.html', form=form)

Comment allez-vous, les gars

J'ai recherché des extraits de code Flask, mais je n'ai pas trouvé de solution générale. S'il vous plaît laissez-moi savoir si vous en avez un.

Il y avait une extension appelée Flask-Mobility, mais c'est un peu pénible car je dois attacher les décorateurs un par un. Si c'est le style Python, je me demande si c'est le cas ... Après cela, il semble qu'il soit impossible de diviser 3 ou plus tels que PC, smartphone, garage. http://flask-mobility.readthedocs.org/en/latest/

J'ai essayé de le faire

J'ai essayé Flask Extension pour avoir quelque chose comme ça. Je veux dire, c'était il y a un an quand je l'ai fait.

Vous pouvez utiliser la série Python 2 ou la série 3.

https://github.com/yasunori/flask-devices

L'installation se fait avec pip.

pip install Flask-Devices

De cette manière, vous pouvez définir n'importe quel nom de groupe de périphériques, expression canonique UserAgent et répertoire de modèles correspondant.

devices = Devices(app)
devices.add_pattern('mobile', 'iPhone|iPod|Android.*Mobile|Windows.*Phone|dream|blackberry|CUPCAKE|webOS|incognito|webmate', 'templates/sp')
devices.add_pattern('tablet', 'iPad|Android', 'templates/pc')
devices.add_pattern('hoge', 'hoge', 'templates/hoge')
devices.add_pattern('pc', '.*', 'templates/pc')

Vous n'avez à définir cela qu'une seule fois et il fera le reste. L'appareil à associer est évalué dans l'ordre du haut.

Après cela, vous pouvez prendre le nom de l'appareil sur la vue ou le modèle, afin de pouvoir l'utiliser lorsque vous modifiez le processus.

@app.route("/", methods=['GET', 'POST'])
def index():
    print(request.DEVICE) # mobile, tablet, hoge, pc
    if request.DEVICE == 'pc':
        # pc
    elif request.DEVICE == 'tablet':
        # tablet
{% if request.DEVICE == 'mobile' %}<strong>C'est mobile maintenant.<a href="">Voulez-vous voir la version PC?</a></strong>{% endif %}

Je l'utilise personnellement de manière pratique.

En guise de mise en garde, lors de l'utilisation de uWSGI Emperor etc., il peut être nécessaire de spécifier le répertoire du modèle avec un chemin absolu.

C'est tout.

Recommended Posts

Flask bascule automatiquement les répertoires de modèles entre le PC et le mobile
Différence entre les répertoires Windows et Linux
Différence de vitesse entre wsgi, bouteille et flacon