doc/book/en/devweb/views/urlpublish.rst
author Julien Jehannet <julien.jehannet@logilab.fr>
Thu, 16 Jun 2011 12:31:27 +0200
branchstable
changeset 7529 2fdc310be7cd
parent 5394 105011657405
child 8032 bcb87336c7d2
permissions -rw-r--r--
[book] add autoload section from code and fix sphinx warnings * drop misleading faq entry since clear explanation can be found in internationalization chapter * use autodata sphinx directive instead of raw text * fill empty chapter with autodoc: - devweb/httpcaching.rst - devweb/resource.rst - devweb/views/idownloadable.rst - devweb/views/wdoc.rst * use shebang in excerpt to denote shell code * fix some bad indented docstrings in javascript files

.. -*- coding: utf-8 -*-

URL publishing
--------------

(:mod:`cubicweb.web.views.urlpublishing`)

.. automodule:: cubicweb.web.views.urlpublishing

.. autoclass:: cubicweb.web.views.urlpublishing.URLPublisherComponent
   :members:

URL rewriting
-------------

(:mod:`cubicweb.web.views.urlrewrite`)

.. autoclass:: cubicweb.web.views.urlrewrite.URLRewriter
   :members:

.. autoclass:: cubicweb.web.views.urlrewrite.SimpleReqRewriter
   :members:

.. autoclass:: cubicweb.web.views.urlrewrite.SchemaBasedRewriter
   :members:


``SimpleReqRewriter`` is enough for a certain number of simple cases. If it is not sufficient, ``SchemaBasedRewriter`` allows to do more elaborate things.

Here is an example of ``SimpleReqRewriter`` usage with plain string:

.. sourcecode:: python

   from cubicweb.web.views.urlrewrite import SimpleReqRewriter
   class TrackerSimpleReqRewriter(SimpleReqRewriter):
       rules = [
        ('/versions', dict(vid='versionsinfo')),
        ]

When the url is `<base_url>/versions`, the view with the __regid__ `versionsinfo` is displayed.

Here is an example of ``SimpleReqRewriter`` usage with regular expressions:

.. sourcecode:: python

    from cubicweb.web.views.urlrewrite import (
        SimpleReqRewriter, rgx)

    class BlogReqRewriter(SimpleReqRewriter):
        rules = [
            (rgx('/blogentry/([a-z_]+)\.rss'),
             dict(rql=('Any X ORDERBY CD DESC LIMIT 20 WHERE X is BlogEntry,'
                       'X creation_date CD, X created_by U, '
                       'U login "%(user)s"'
                       % {'user': r'\1'}, vid='rss'))),
            ]

When a url matches the regular expression, the view with the __regid__
`rss` which match the result set is displayed.

Here is an example of ``SchemaBasedRewriter`` usage:

.. sourcecode:: python

    from cubicweb.web.views.urlrewrite import (
        SchemaBasedRewriter, rgx, build_rset)

    class TrackerURLRewriter(SchemaBasedRewriter):
        rules = [
            (rgx('/project/([^/]+)/([^/]+)/tests'),
             build_rset(rql='Version X WHERE X version_of P, P name %(project)s, X num %(num)s',
                        rgxgroups=[('project', 1), ('num', 2)], vid='versiontests')),
            ]