[PYTHON] Flask wechselt automatisch zwischen Vorlagenverzeichnissen zwischen PC und Handy

Bedarf

Ich möchte, dass UserAgent beurteilt, ob es sich um einen PC oder ein Smartphone handelt, und das Stammverzeichnis der Vorlage ohne Erlaubnis wechselt.

Bereiten Sie beispielsweise eine Vorlage wie diese vor

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

In Sicht möchte ich dies tun, ohne das Gerät zu kennen. Ich möchte, dass Sie den PC oder SP automatisch sehen.

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

Wie geht es euch

Ich suchte nach Flask-Snippets, konnte aber keine allgemeine Lösung finden. Bitte lassen Sie mich wissen, wenn Sie eine haben.

Es gab eine Erweiterung namens Flask-Mobility, aber das ist etwas schmerzhaft, weil ich nacheinander Dekorateure anbringen muss. Wenn das der Python-Stil ist, frage ich mich, ob das der Fall ist ... Danach scheint es unmöglich zu sein, 3 oder mehr wie PC, Smartphone, Garage zu teilen. http://flask-mobility.readthedocs.org/en/latest/

Versuchte es zu schaffen

Ich habe versucht, Flask Extension so etwas zu haben. Ich meine, es war vor einem Jahr, als ich es geschafft habe.

Sie können entweder die Python 2-Serie oder die 3-Serie verwenden.

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

Die Installation erfolgt mit pip.

pip install Flask-Devices

Auf diese Weise können Sie einen beliebigen Gerätegruppennamen, einen kanonischen UserAgent-Ausdruck und ein entsprechendes Vorlagenverzeichnis definieren.

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

Sie müssen dies nur einmal definieren und der Rest wird erledigt. Das zu passende Gerät wird in der Reihenfolge von oben ausgewertet.

Danach können Sie den Gerätenamen in Ansicht oder Vorlage übernehmen, damit Sie ihn verwenden können, wenn Sie den Prozess ändern.

@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>Es ist jetzt mobil.<a href="">Möchten Sie die PC-Version sehen?</a></strong>{% endif %}

Ich persönlich benutze es bequem.

Als Einschränkung kann es bei Verwendung von uWSGI Emperor usw. erforderlich sein, das Vorlagenverzeichnis mit einem absoluten Pfad anzugeben.

Das ist es.

Recommended Posts

Flask wechselt automatisch zwischen Vorlagenverzeichnissen zwischen PC und Handy
Unterschied zwischen Windows- und Linux-Verzeichnissen
Geschwindigkeitsunterschied zwischen wsgi, Flasche und Flasche