DocsConventions de fichiers
Conventions de fichiers
Noms et règles réservés sous src/routes/.
Fichiers d'itinéraire
| Fichier | Devient |
|---|---|
index.nexy, index.md, index.mdx, index.py |
le parcours de son répertoire |
about.nexy |
/about |
[slug].nexy |
segment dynamique {slug} |
[...path].nexy |
fourre-tout {path:path} |
(group)/page.nexy |
/page : le groupe n'apparaît pas dans l'URL |
name.py |
Gestionnaire d'API ; les noms de fonctions GET, POST, ... sont les méthodes |
name.tsx, .jsx, .vue, .svelte |
route client lorsque le framework est activé avec useFF |
src/routes/
index.nexy/
about.nexy/about
(marketing)/
pricing.nexy/pricing
blog/
index.md/blog
[slug].nexy/blog/{slug}
docs/
[...path].nexy/docs/{path:path}
api/
users.pyGET /api/users, POST /api/users
async def GET(): return {"users": []} async def POST(): return {"created": True}Fichiers réservés
| Fichier | Rôle | Détails |
|---|---|---|
layout.nexy |
mode serveur : encapsule chaque page en dessous ; la racine est propriétaire du document HTML | layout.nexy |
layout.tsx |
mode client (React) : la racine est propriétaire du document HTML, les pages imbriquées enveloppent les pages | layout.tsx |
layout.vue, layout.svelte |
mode client : mises en page imbriquées | layout.vue, layout.svelte |
notfound.nexy |
Page 404 pour son annuaire | Pages d'erreur |
errors.nexy |
500 pages pour son annuaire | Pages d'erreur |
forbidden.nexy |
Page 403 pour son annuaire | Pages d'erreur par dossier |
unauthorized.nexy |
401 page pour son annuaire | Pages d'erreur par dossier |
loading.nexy |
réservé; pas encore d'effet d'exécution | Pages d'erreur |
middleware.py |
un async def middleware(request, call_next) encapsulant les requêtes du répertoire et ci-dessous |
Fichiers middleware |
dependencies.py |
une liste dependencies = [fn, ...] appliquée au répertoire et à ses enfants |
Dépendances |
__init__.py |
Python marqueur de paquet | |
favicon.ico |
servi à /favicon.ico |
useLayoutExtensions, useNotFoundExtensions, useErrorsExtensions, useForbiddenExtensions, useUnauthorizedExtensions et useLoadingExtensions réservent davantage d'extensions pour ces noms. Voir Configuration.
Les deux fichiers Python du tableau, côte à côte dans un même dossier :
from nexy.http import Request async def middleware(request: Request, call_next): response = await call_next(request) response.headers["x-admin"] = "1" return responsefrom nexy.http import Header, HTTPException def require_admin(x_role: str = Header(...)) -> None: if x_role != "admin": raise HTTPException(status_code=403, detail="Admins only") dependencies = [require_admin]Et une page qui répond à la 404 de son dossier :
<h1>Page not found</h1><p><a href="/">Back home</a></p>Fichiers ignorés
- Un fichier ou un dossier commençant par
_ou.: utilisez-le pour les partiels, les brouillons et les aides. - Un fichier dont l'extension n'est pas active pour le projet : il est ignoré avec un avertissement.
src/routes/
index.nexy/
_card.nexyignored: a partial the pages include
_helpers/ignored, with everything inside
format.py
.draft.nexyignored: a draft
Un fichier par URL
Deux fichiers qui renvoient à la même URL sont tous deux enregistrés. Ne mettez pas blog.nexy à côté de blog/index.nexy.
src/routes/
blog.nexy/blog
blog/
index.nexy/blog as well: keep only one of the two
À l'extérieur src/routes/
| Dossier | Objectif |
|---|---|
src/components/ |
composants importés par pages ; jamais de routes |
src/apps/ |
contrôleurs et modules du routeur modulaire |
public/ |
fichiers statiques, servis à la racine : public/logo.svg est /logo.svg (également sous /public/) |
__nexy__/ |
sortie générée ; ne vous engagez pas |
my-app/
nexyconfig.py
public/
logo.svg/logo.svg
src/
routes/the routes
components/
Counter.tsximported by pages, never served on its own
apps/the modular router, when you use it
__nexy__/generated: add it to .gitignore