DokuDateibasiert
Seitenmetadaten
Eine Seite benennt ihren Titel und ihre Head-Tags, und das Root-Layout schreibt sie einmal.
Sagen Sie es auf der Seite
Für eine Seite, die sich nie ändert, schreiben Sie oben in die Titelzeile ein Literal:
metadata = {"title": "Blog", "description": "Posts about Nexy"}<h1>Blog</h1>Wenn der Titel von den Daten abhängt, rufen Sie stattdessen setMetadata auf:
from nexy import notFound, setMetadata from src.posts import find slug: prop[str]post = find(slug) or notFound()setMetadata(title=post.title, description=post.summary, og={"image": post.cover})<h1>{{ post.title }}</h1>Ein modularer Controller ruft setMetadata(...) auf, bevor er useViews(...) zurückgibt.
Schreiben Sie es in das Layout
Das Root-Layout besitzt das <head>. Eine Zeile schreibt, was die Seite gesagt hat, mit Escapezeichen:
from nexy import setMetadata, useMetadata children: prop[NexyElement]setMetadata(title_template="%s | My site")<!DOCTYPE html><html> <head> {{ useMetadata().html() }} </head> <body>{{ children }}</body></html>Eine Seite wird vor ihren Layouts ausgeführt, sodass das Layout findet, wonach die Seite gefragt hat. Eine Seite, die nichts sagt, erhält das useTitle Ihres nexyconfig.py und kein anderes Tag.
Die Felder
| Feld | Geschrieben als |
|---|---|
title |
<title>; mit title_template="%s | My site" wird der Titel in das %s eingefügt |
description |
<meta name="description"> |
canonical |
<link rel="canonical"> |
robots |
<meta name="robots">, zum Beispiel "noindex" |
icon |
<link rel="icon"> |
og |
ein <meta property="og:..."> pro Schlüssel: {"image": "/cover.png"} ergibt og:image |
twitter |
ein <meta name="twitter:..."> pro Schlüssel |
extra |
eine Liste von Attribut-Diktaten, jeweils ein <meta>: [{"name": "theme-color", "content": "#fff"}] |
Ein späterer Aufruf ersetzt einen Wert; og, twitter und extra ergänzen das, was da ist. Ein Feld, das nicht existiert, löst TypeError aus, sodass ein Tippfehler nicht stillschweigend nichts bewirkt.
Standardmäßig sicher
Jeder Wert ist mit HTML-Escapezeichen versehen, sodass ein aus einer URL oder aus der Datenbank erstellter Titel das Tag nicht schließen und ein Skript einfügen kann. Ein Wert wird einmal maskiert, wenn das Layout html() aufruft: maskieren Sie ihn nicht selbst.