Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Newer
Older
100644 93 lines (58 sloc) 2.263 kb
dadca0a Add french translation
nux authored
1 ---
2 layout: default
3 title: Mise en page selon un gabarit
4 ---
5
6 # Mise en page selon un gabarit
7
8 Autres langages : [english](/../layout_template) | ...
9
10
11
12 ### Problème
13
14
15 Comment puis-je utiliser un modèle/gabarit de site qui s'affiche dans chaque page? (Dans d'autres frameworks, cela s'appelle l'héritage des templates - template inheritance)
16
17 ### Solution
18
19
20 Cela peut être fait en utilisant l'attribut de base:
21
22 render = web.template.render('templates/', base='layout')
23
24
25 Maintenant si vous faites quelque chose comme `render.foo ()` il cherchera le gabarit `templates/foo.html`, puis l'enveloppera dans le gabarit `templates/layout.html`
26
27
28
29 Le format de "layout.html" doit être un simple gabarit qui contient une variable. Par exemple:
30
31 $def with (content)
32 <html>
33 <head>
34 <title>Foo</title>
35 </head>
36 <body>
37 $:content
38 </body>
39 </html>
40
41
42 Si vous ne souhaitez pas utiliser le modèle de base, il suffit de créer un deuxième objet, sans l'attribut "base", ainsi:
43
44 render_plain = web.template.render('templates/')
45
46 ###Astuce: Le titre de page est défini dans d'autres fichiers gabarits qui sont ensuite utilisés par la mise en page (layout.html). Par exemple:
47
48 #####templates/index.html
49 $var title: This is title.
50
51 <h3>Hello, world</h3>
52
53 #####templates/layout.html
54 $def with (content)
55 <html>
56 <head>
57 <title>$content.title</title>
58 </head>
59 <body>
60 $:content
61 </body>
62 </html>
63
64
65 ###Astuce: Ajouter des fichiers css dans d'autres fichiers gabarits. Exemple:
66
67 ####templates/login.html
68
69 $var cssfiles: static/login.css static/login2.css
70
71 hello, world.
72
73 ####templates/layout.html
74
75 $def with (content)
76 <html>
77 <head>
78 <title>$content.title</title>
79
80 $if content.cssfiles:
81 $for f in content.cssfiles.split():
82 <link rel="stylesheet" href="$f" type="text/css" media="screen" charset="utf-8"/>
83
84 </head>
85 <body>
86 $:content
87 </body>
88 </html>
89
90 Le code HTML de sortie ressemble à celui ci-dessous:
91
92 <link rel="stylesheet" href="static/login.css" type="text/css" media="screen" charset="utf-8"/>
93 <link rel="stylesheet" href="static/login2.css" type="text/css" media="screen" charset="utf-8"/>
Something went wrong with that request. Please try again.