mirror of
https://github.com/rjNemo/vf-site
synced 2026-06-06 01:16:38 +00:00
use file based routing
This commit is contained in:
parent
c7f5429266
commit
255714eca2
9 changed files with 44 additions and 27 deletions
24
README.md
24
README.md
|
|
@ -2,12 +2,23 @@
|
|||
|
||||
[](https://app.netlify.com/sites/villafleurie-site/deploys)
|
||||
|
||||
## Static Site Generator
|
||||
## How to use
|
||||
|
||||
You can build the site using the built-in static site generator included.
|
||||
|
||||
To create a page, create a `toml` file in the `pages` directory. It should contain at least the following fields:
|
||||
|
||||
```toml
|
||||
name = "index"
|
||||
template = "index.html"
|
||||
```
|
||||
|
||||
You can add other fields they will become available in the template.
|
||||
|
||||
The entry point is located in the [main file](./lib/main.py). It should not be modified.
|
||||
|
||||
By default, the templates files are located in the [templates](./templates) directory.
|
||||
You can use template inheritance but not yet data injection.
|
||||
You can use template inheritance.
|
||||
|
||||
### Configuration
|
||||
|
||||
|
|
@ -17,13 +28,6 @@ The configuration file ([config.json](./config.json)) is mandatory and should re
|
|||
{
|
||||
"name": "VillaFleurie",
|
||||
"templatesDir": "templates",
|
||||
"templates": [
|
||||
"index.html",
|
||||
"t2-corail.html",
|
||||
"t3-azur.html",
|
||||
"contact.html",
|
||||
"reservation.html"
|
||||
],
|
||||
"staticFilesDir": [],
|
||||
"outDir": "dist"
|
||||
}
|
||||
|
|
@ -64,7 +68,7 @@ You can then deploy the site on any platform supporting static sites (Netlify,
|
|||
- [x] Pick real reviews from AirBnB and Booking
|
||||
- [ ] Optimize images
|
||||
- [ ] Automate the file search
|
||||
- [ ] Extract data out of the template
|
||||
- [x] Extract data out of the template
|
||||
- [ ] Create a 'all' key for data available in all templates
|
||||
- [ ] Create a template for the rooms
|
||||
- [ ] Build script before commit
|
||||
|
|
|
|||
|
|
@ -1,12 +1,5 @@
|
|||
{
|
||||
"name": "VillaFleurie",
|
||||
"templates": [
|
||||
"index.html",
|
||||
"t2-corail.html",
|
||||
"t3-azur.html",
|
||||
"contact.html",
|
||||
"reservation.html"
|
||||
],
|
||||
"staticFilesDir": [
|
||||
"images",
|
||||
"js",
|
||||
|
|
|
|||
|
|
@ -11,7 +11,6 @@ OUT_DIR = "outDir"
|
|||
@dataclass(frozen=True)
|
||||
class Config:
|
||||
name: str
|
||||
templates: list[str]
|
||||
static_files_dir: list[str]
|
||||
out_dir: str
|
||||
templates_dir: str
|
||||
|
|
@ -22,7 +21,6 @@ def load() -> Config:
|
|||
raw_config = json.loads(f.read())
|
||||
return Config(
|
||||
name=raw_config[NAME],
|
||||
templates=raw_config[TEMPLATES],
|
||||
static_files_dir=raw_config[STATIC_FILES_DIR],
|
||||
out_dir=raw_config.setdefault(OUT_DIR, "dist"),
|
||||
templates_dir=raw_config.setdefault(TEMPLATES_DIR, "templates"),
|
||||
|
|
|
|||
23
lib/main.py
23
lib/main.py
|
|
@ -1,6 +1,7 @@
|
|||
import os
|
||||
import shutil
|
||||
import sys
|
||||
import tomllib
|
||||
|
||||
from loguru import logger
|
||||
|
||||
|
|
@ -15,20 +16,20 @@ def main():
|
|||
logger.error("The configuration file 'config.json' was not found. Please verify it exists at the root level")
|
||||
sys.exit()
|
||||
|
||||
data = {}
|
||||
destination_path = config.out_dir
|
||||
fs = FileSystemRenderer(config.templates_dir)
|
||||
|
||||
logger.info(f"🏁 Start building {config.name}")
|
||||
|
||||
if os.path.exists(destination_path) and os.path.isdir(destination_path):
|
||||
shutil.rmtree(destination_path)
|
||||
os.mkdir(destination_path)
|
||||
clean_dist(destination_path)
|
||||
|
||||
for template in config.templates:
|
||||
logger.info(f"📃Render '{template}'")
|
||||
with open(os.path.join(destination_path, template), "w") as f:
|
||||
f.write(fs.render(template, data.get(template)))
|
||||
pages = [page for page in os.scandir("./pages") if page.is_file()]
|
||||
for page in pages:
|
||||
with open(page, "rb") as f:
|
||||
data = tomllib.load(f)
|
||||
logger.info(f"📃Render '{page.name}'")
|
||||
with open(os.path.join(destination_path, f'{data["name"]}.html'), "w") as fd:
|
||||
fd.write(fs.render(data["template"], data))
|
||||
|
||||
logger.info("⏩ Start copying staticfiles to build")
|
||||
for folder in config.static_files_dir:
|
||||
|
|
@ -37,5 +38,11 @@ def main():
|
|||
logger.info("🎉 Done…")
|
||||
|
||||
|
||||
def clean_dist(destination_path: str):
|
||||
if os.path.exists(destination_path) and os.path.isdir(destination_path):
|
||||
shutil.rmtree(destination_path)
|
||||
os.mkdir(destination_path)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
|
|
|
|||
3
pages/contact.toml
Normal file
3
pages/contact.toml
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
name = "contact"
|
||||
title = "Contact | VillaFleurie - Locations de vacances au Gosier en Guadeloupe"
|
||||
template = "contact.html"
|
||||
3
pages/index.toml
Normal file
3
pages/index.toml
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
name = "index"
|
||||
title = "VillaFleurie | Locations de vacances au Gosier en Guadeloupe"
|
||||
template = "index.html"
|
||||
3
pages/reservation.toml
Normal file
3
pages/reservation.toml
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
name = "reservation"
|
||||
title = "Reservation | VillaFleurie - Locations de vacances au Gosier en Guadeloupe"
|
||||
template = "reservation.html"
|
||||
3
pages/t2-corail.toml
Normal file
3
pages/t2-corail.toml
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
name = "t2-corail"
|
||||
title = "T2 Corail, petit nid douillet | VillaFleurie - Locations de vacances au Gosier en Guadeloupe"
|
||||
template = "t2-corail.html"
|
||||
3
pages/t3-azur.toml
Normal file
3
pages/t3-azur.toml
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
name = "t3-azur"
|
||||
title = "T3 Azur, besoin d'un lieu confortable | VillaFleurie - Locations de vacances au Gosier en Guadeloupe"
|
||||
template = "t3-azur.html"
|
||||
Loading…
Reference in a new issue