Variables and functions available to templates

The following global variables and functions are available to all CKAN templates in their top-level namespace:


In addition to the global variables listed below, each template also has access to variables from a few other sources:

  • Any extra variables explicitly passed into a template by the controller that rendered the template will also be available to that template, in its top-level namespace. Any variables explicitly added to the template context variable c will also be available to the template as attributes of c.

    To see which additional global variables and context attributes are available to a given template, use CKAN’s debug footer.

  • Any variables explicitly passed into a template snippet in the calling {% snippet %} tag will be available to the snippet in its top-level namespace. To see these variables, use the debug footer.

  • Jinja2 also makes a number of filters, tests and functions available in each template’s global namespace. For a list of these, see the Jinja2 docs.


The Pylons template context object, a thread-safe object that the application can store request-specific variables against without the variables associated with one HTTP request getting confused with variables from another request.

tmpl_context is usually abbreviated to c (an alias).

Using c in CKAN is discouraged, use template helper functions instead. See Don’t use c.

c is not available to snippets.


An alias for tmpl_context.


The Pylons App Globals object, an instance of the ckan.lib.app_globals.Globals class. The application can store request-independent variables against the app_globals object. Variables stored against app_globals are shared between all HTTP requests.


An alias for app_globals.


CKAN’s template helper functions, plus any custom template helper functions provided by any extensions.


The Pylons Request object, contains information about the HTTP request that is currently being responded to, including the request headers and body, URL parameters, the requested URL, etc.


The Pylons Response object, contains information about the HTTP response that is currently being prepared to be sent back to the user, including the HTTP status code, headers, cookies, etc.


The Beaker session object, which contains information stored in the user’s currently active session cookie.


The pylons.i18n.translation.ugettext(value) function:

Mark a string for translation. Returns the localized unicode string of value.

Mark a string to be localized as follows:

_('This should be in lots of languages')

The pylons.i18n.translation.gettext_noop(value) function:

Mark a string for translation without translating it. Returns value.

Used for global strings, e.g.:

foo = N_('Hello')

class Bar:
    def __init__(self):
        self.local_foo = _(foo)

assert Bar().local_foo == 'Bonjour'
assert Bar().local_foo == 'Hola'
assert foo == 'Hello'

The pylons.i18n.translation.ungettext(singular, plural, n) function:

Mark a string for translation. Returns the localized unicode string of the pluralized value.

This does a plural-forms lookup of a message id. singular is used as the message id for purposes of lookup in the catalog, while n is used to determine which plural form to use. The returned message is a Unicode string.

Mark a string to be localized as follows:

ungettext('There is %(num)d file here', 'There are %(num)d files here',
          n) % {'num': n}

An instance of the gettext.NullTranslations class. This is for internal use only, templates shouldn’t need to use this.

class actions

The ckan.model.authz.Action class.


Remove this? Doesn’t appear to be used and doesn’t look like something we want.