Including CSS and Javascript is easy with mako inheritance
Here's an example:
basepage.mak:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 | <% self.seen_css = set() %>
<head>
${self.css()}
</head>
<%def name="css_link(path, media='')">
% if path not in self.seen_css:
<link rel="stylesheet" type="text/css" href="${path|h}" media="${media}"></link>
% endif
<% self.seen_scripts.add(path) %>
</%def>
<%def name="css()">
${css_link('/css/main.css', 'screen')}
${css_link('/css/navigation.css', 'screen')}
${css_link('/css/forms-buttons.css', 'screen')}
${css_link('/css/orders.css', 'screen')}
</%def>
|
css_link is a little utility method that guards against you accidentally including the same CSS file twice.
Then, if you want to add some CSS in a child template, you can override the css method like this:
child1.mak:
1
2
3
4 | <%def name="css()">
${parent.css()}
${self.css_link('/css/products.css', 'screen')}
</%def>
|
Or if you want to have the parent's CSS come after the child's, like this:
child2.mak:
1
2
3
4 | <%def name="css()">
${self.css_link('/css/products.css', 'screen')}
${parent.css()}
</%def>
|
This will work just as well for larger inheritance heirarchies. The same ideas can be applied just as easily to javascript.