add_build_program
(cls, program
)This is very experimental API and used to register build programs for custom source objects. This can be used to implement virtual items. This works in combination with generator and urlresolver and is responsible for generating artifacts out of source objects.
from lektor.sourceobj import VirtualSourceObject from lektor.build_programs import BuildProgram from lektor.utils import build_url class Source(VirtualSourceObject): @property def path(self): return self.record.path + '@source' @property def source_content(self): with open(self.record.source_filename) as f: return f.read().decode('utf-8') @property def url_path(self): return build_url([self.record.url_path, 'source.txt']) class SourceBuildProgram(BuildProgram): def produce_artifacts(self): self.declare_artifact( self.source.url_path, sources=list(self.source.iter_source_filenames())) def build_artifact(self, artifact): artifact.render_template_into('view_source.html', this=self.source) env.add_build_program(Source, SourceBuildProgram) @env.virtualpathresolver('source') def resolve_virtual_path(record, pieces): if not pieces: return Source(record)
And here the example view_source.html
template:
<h2>Source for {{ this.parent.path }}</h2> <pre>{{ this.source_content }}</pre>
Comments