Deux principales techno pour le routage
A une route on associe un ou plusieurs motifs intégrant des parties constantes (chaînes littérales) et des variables (marqueurs). Lorsqu'il y a correspondance entre l'URL de la requête et le motif, la route est utilisée. Les motifs sont évalués séquentiellement et leur ordre de déclaration est donc important.
Motifs | URL correspondant | URL rejetée |
---|---|---|
/home | /home | /home/ |
/books/{id}.txt | /books/142.txt; /books/ravage.txt | /books/142 |
/books/{id:\d+}.txt | /books/142.txt | /books/ravage.txt |
Lorsqu'une correspondance est établie sur une URL, les objets suivants sont attachés en attributs à l'objet de type pyramid.request.Request:
Pour générer les URLs correspondant aux motifs des routes déclarées, utiliser la méthode pyramid.request.Request.route_url()
La méthode retourne une chaîne de la forme http://example.com/route/v1/v2
Pour générer uniquement la partie chemin de l'URL utiliser la méthode pyramid.request.Request.route_path()
Les routes peuvent être déclarées avec un argument static
. Lorsque l'argument static est vrai, la route déclarée n'est pas prise en compte lors de la recherche de correspondance (matching) de la requête. En revanche elles sont très utiles pour la génération d'URL:
Ce comportement peut être testé en mode interactif:
>>> from pyramid import testing >>> conf = testing.setUp() >>> conf.add_route('page', '/page/{action}', static=True) >>> request = testing.DummyRequest() >>> request.route_url('page', action='about') 'http://example.com/page/about'