urlresolver ()

This is very experimental API and used to register a custom URL resolver function with the environment. It's invoked whenever a node has matched but more data is left to parse. This can be used to implement virtual items. This works in combination with generator but handles the URL matching part of the equation.

The registered function is invoked with a source object and a list of URL path segments.


from lektor.sourceobj import VirtualSourceObject
from lektor.utils import build_url

class Source(VirtualSourceObject):

    def path(self):
        return self.record.path + '@source'

    def url_path(self):
        return build_url([self.record.url_path, 'source.txt'])

def match_source_file(node, url_path):
    if url_path == ['source.txt'] \
       and isinstance(node, Record) \
       and not node.is_attachment:
        return Source(node)