58 lines
2.0 KiB
Markdown
58 lines
2.0 KiB
Markdown
title: sub_artifact
|
|
---
|
|
summary: Creates a sub-artifact of the current one.
|
|
---
|
|
type: method
|
|
---
|
|
signature: artifact_name, sources=None, source_obj=None, config_hash=None
|
|
---
|
|
body:
|
|
|
|
This method can be used as Python decorator to inform the builder to create
|
|
an artifact that is related to the current artifact but locally contained
|
|
within it. For instance this is used to implement the thumbnailing and
|
|
similar things.
|
|
|
|
Each artifact needs at least a name which is what the final file will be
|
|
called. For instance `/demo.css` would place an artifact named `demo.css`
|
|
in the root folder. The `sources` is an optional list of files that indicate
|
|
that they are responsible for creating this artifact. It can be left empty
|
|
in which case the artifact just tracks the current file. The `source_obj`
|
|
can optionally point to a source object but for most plugins this will never
|
|
be set.
|
|
|
|
The artifact passed to the function is then the [Artifact :ref](../../artifact/)
|
|
object for modification. Note that the function will not be invoked if the
|
|
artifact is already considered up to date.
|
|
|
|
In addition a `config_hash` can be provided with can be a hash value. If
|
|
provided it can identify the configuration that the artifact was created
|
|
from. If the hash changes the artifact will be rebuilt. Such a hash
|
|
can for instance be generated with [get_structure_hash
|
|
:ref](../../../utils/get-structure-hash/).
|
|
|
|
## Example
|
|
|
|
```python
|
|
import os
|
|
from lektor.pluginsystem import Plugin
|
|
|
|
class IncludeFilePlugin(Plugin):
|
|
|
|
def setup_env(self, **extra):
|
|
def get_css(artifact_name='/demo.css'):
|
|
ctx = get_ctx()
|
|
@ctx.sub_artifact(artifact_name)
|
|
def build_stylesheet(artifact):
|
|
with artifact.open('w') as f:
|
|
f.write('body { background: red; }\n')
|
|
return artifact_name
|
|
self.env.jinja_env.globals['get_demo_css'] = get_css
|
|
```
|
|
|
|
Inside a template it can be used like this:
|
|
|
|
```html+jinja
|
|
<link rel=stylesheet href="{{ get_demo_css()|url }}">
|
|
```
|