Usage
Install
The library is on PyPI, so you can install it with pip:
pip install svelte-web-components
# or
pip install "svelte_web_components[fastapi]"
Create a component
Create a folder to store your components, for example assets/components.
In there create a file MyComponent.svelte for your component:
<script>
export let name = 'World';
</script>
<h1>Hello {name}!</h1>
Generate the js bundle
If you are using fastapi see bellow.
Flask and other frameworks are not supported yet, but it will be easy to add support for them.
Initiate a Bundle instance with the path to your components folder and a name:
from svelte_web_components import Bundle
bundle = Bundle({
"components": "assets/components",
})
js_bundle = bundle["components"]
Now you can use the js_bundle to write it in your html file, or save it in a file and serve it with your framework.
Use the component
In your html file, import the js bundle:
<my-component name="John"></my-component>
<script>
{{ js_bundle | safe }}
</script>
This is not a good way to import the js bundle, because it will be loaded synchronously and will block the page rendering. Also your html file would be huge because this will add inline the js bundle.
FastAPI integration
Generate you components the same way as before.
Initiate a SvelteFiles instance with the path to your components folder and a name.
Also pass the templates and app arguments.
from svelte_web_components import SvelteFiles
app = FastAPI()
templates = Jinja2Templates(directory="templates")
svelte = SvelteFiles({
"components": "assets/components",
}, templates=templates, app=app)
In your html file, import the js bundle:
<my-component name="John"></my-component>
{{ svelte_scripts | safe }}
This will take care of loading the js bundle asynchronously and only once.
For more details see the Bundle and FastAPI integration pages.