Flacon de rediriger plusieurs itinéraires

Je suis en train de mettre en œuvre une redirection modèle, similaire à ce que StackOverflow n':

@route('/<int:id>/<username>/')
@route('/<int:id>/')
def profile(id, username=None):
    user = User.query.get_or_404(id)

    if user.clean_username != username:
        return redirect(url_for('profile', id=id, username=user.clean_username))

    return render_template('user/profile.html', user=user) 

Voici un tableau simple de ce qui devrait se produire:

URL                         Redirects/points to
====================================================
/user/123                   /user/123/clean_username
/user/123/                  /user/123/clean_username
/user/123/foo               /user/123/clean_username
/user/123/clean_username    /user/123/clean_username
/user/123/clean_username/   /user/123/clean_username/
/user/125698                404

Maintenant, je peux accéder au profil avec /user/1/foo, mais /user/1 produit un BuildError. J'ai essayé de la alias=True argument mot-clé et quelque chose avec defaults, mais je ne suis pas tout à fait sûr ce n'est pas de travail.

Comment aurais-je un itinéraire rediriger vers l'autre?

  • Je ne sais pas si je suis absent quelque chose.. mais qui ne devrait pas l'être à l'intérieur d'une classe et d'avoir un self paramètre? (en supposant que vous utilisez flacon chic) Autre chose qui pourrait être mal si vous êtes en utilisant des modèles est que vous devez ajouter le modèle de nom de url_for (flask.pocoo.org/docs/blueprints/#building-urls).
  • Si vous êtes l'obtention d'un BuildError ensuite, il ya quelque chose de mal avec votre appel à url_for. Pouvez-vous fournir le traceback?
  • C'est un exemple simplifié qui illustre bien le problème. À l'aide de plans ou de Flacon Chic n'aurait pas vraiment changer quoi que ce soit.
  • vous pouvez poster votre app.url_map? cela devrait vous aider à comprendre ce qui fait url_for de s'étouffer.
  • Donc, euh... que l'on devrait obtenir le bounty?
  • Eh bien, il s'est avéré que mon problème était dû à une erreur stupide de ma part, donc je ne suis pas sûr.
  • Si nous sommes d'être littérale, je ne crois strict_slashes fait la différence ici, /user/123/foo redirige vers /user/123/foo/. c'est le /user/123/foo/ url, ce qui n'apparaît pas dans votre tableau, qui exécutera votre fonction et est censé rediriger vers la bonne url.

InformationsquelleAutor Blender | 2013-06-24