title: url_to
---
summary: Generates a URL relative to another path.
---
type: method
---
signature: path, alt=None, absolute=None, external=None, base_url=None, resolve=None, strict_resolve=None
---
body:

Calculates the URL from the current source object to the given other source
object.  Alternatively, a path can also be provided instead of a source object.

This is what the [`|url` filter](../../../templates/filters/url/) uses
internally to generate URLs.

If `resolve` is not `False`, then (so long as `path` is not a URL
containing either a _scheme_ or a _netloc_) an attempt is made to
resolve `path` via the [Lektor database](../../) to a _source object_,
then the URL of that source object is used.  If database-resolution of
the path fails, then the path is interpreted as a URL-path, or, if
`strict_resolve` is `True`, an error is raised.

If the path starts with a leading bang (``!``) then no resolving is
performed.  This is equivalent to passing `resolve=False`.

An explicit value for `alt` may be specified via the `alt` parameter to `url_to`.
Alternatively, an `alt` query arg may be included in the `path` parameter.
For example, `src.url_to('/', alt='de')` is equivalent to `src.url_to('/?alt=de')` — both return the URL to the root of the site with `alt=de`. 

If no `alt` is provided the `alt` of the page is used.


In addition to that `absolute` can enforce the URL to be absolute instead of
relative to the current page and `external` can be used to also add the
domain part to the URL (if configured).  The default behavior is to use the
configured URL style (which is `relative`) unless absolute or external were
explicitly provided.  For more information read about this in the
[Project Configuration :ref](../../../../project/file/#project).

## Example

```html+jinja
{% set downloads = site.get('/downloads') %}
Path from downloads to here: {{ downloads.url_to(this) }}
```
