close Warning: Can't synchronize with repository "(default)" (Unsupported version control system "svn": No module named svn). Look in the Trac log for more information.

Version 7 (modified by cmlenz, 13 years ago) (diff)

URL generation

URL Routing and Generation

The diva.routing module provides dispatching of requests to request handlers based on the requested path, as well as the generation of concrete URLs based on the routing.

Routing Configuration File

While routes can of course be set up programatically, a simple configuration file format is also supported.

A simple example:

home:           /                       -> geddit.controllers:index
feed:           /feed                   -> geddit.controllers:feed
info:           /info/{id}              -> geddit.controllers:info
comment:        /info/{id}/comment      -> geddit.controllers:comment
submit:         /submit                 -> geddit.controllers:submit

media:          /media/{filename:.+}    -> diva.static:directory
    path = "%(here)s/static/"

Every route is on a single line, with three different parts:

  • the name of the route (optional)
  • the path pattern with variable parts enclosed in curly braces, and
  • the target function that should handle requests matching that pattern (optional).

Additional indented lines can be provided below any route to set default values for parameters that get passed on to the request handler. The value of these parameters can be any Python expression.

If no name is specified for a route, URLs for that route can not be generated by name, but only based on the function object. If no target is specified, the route is only used for generating links, not for dispatching requests.

Generating URLs

The diva.routing modules provides a number of ways to generate URLs based on the routing.

The central function is path_to(target, *args, **kwargs). Here, target is either the name of the route, or the function handling the route. Additional arguments are substituted for variables in the path of the route. Any remaining keyword arguments are added as query string parameters:

>>> from diva.routing import path_to
>>> path_to('info', id=42)
/info/42
>>> path_to('info', id=42, page=2)
/info/42?page=2

Use the abs_url function to turn such relative URLs into absolute ones including scheme and host:

>>> from diva.routing import abs_url, path_to
>>> abs_url(path_to('info', id=42))
http://localhost:8080/info/42

Finally, the redirect(target, *args, **kwargs) function is a shortcut for redirecting to the absolutized result of `path_to(). It will raise an HTTP exception, and thus immediately break out of the current code.

API Documentation

Error: Macro PythonDoc(trunk, diva.routing) failed
Unsupported version control system "svn": No module named svn