2016-07-12 5 views
2

Ich habe versucht, diese Zeile in Python3 (Flask) Projekt zu verwenden, die UTF-8-Kodierung ist:Wie wird @ angezeigt, anstatt als% 40 (URL-Code) in der Browser-Adressleiste codiert zu werden?

@app.route('/@<username>', methods=['GET', 'POST']) 

Aber in der Adresszeile Browser, zeigt es immer so:

http://example.com/%40username 

Wie das Original "@" in der Browser-Adressleiste anzeigen? Vielen Dank!

+0

Sie dies nicht tun. Das ist kein gültiges Zeichen in einer URL. Bei bestimmten Browsern sieht es so aus, als ob es das Originalzeichen wäre, aber Sie können das nicht auf * gültige * Weise steuern. – davidism

Antwort

1

Verwenden Sie url_for aus Python-Code? Ein Ansatz in einem solchen Fall ist zu nennen urllib.unquote auf Rückgabewert von url_for

Beispielcode:

from flask import Flask, url_for, redirect 
import urllib 
app = Flask(__name__) 

@app.route("/") 
def hello(): 
    return redirect(urllib.unquote(url_for('user', username='test'))) 

@app.route('/@<username>', methods=['GET', 'POST']) 
def user(username): 
    return "Hello %s" % (username) 

if __name__ == "__main__": 
    app.run() 

Deaktivieren Charakter diskutiert entweichende here

+0

PS, wenn ich 'example.com/@username' in die Adresszeile des Browsers eingebe, wird @ als normales @ angezeigt. Ich habe Ihren Beispielcode ausprobiert, es funktioniert auch für die Eingabe von Hand. Mein Problem ist, wenn diese Route aus einer Vorlagendatei gerendert wird, z. href = "{{url_for ('. user', username = username)}}, es zeigt @ als% 40 auf der Adressleiste der neuen Seite an. – rogwan

+0

ist dieser Link nützlich? http://stackoverflow.com/questions/27300332/ disabled-character-escape-in-flasks-url-for-function – Kevin

+0

Danke Kevin, der Link, den du mir empfohlen hast, gibt mir Hilfe! – rogwan