-
-{% endblock content %}
+{% extends "templates/project_list.tmpl" %}
diff --git a/www/rocky/projects.html b/www/rocky/projects.html
index 1cdd806556..badd874e92 100644
--- a/www/rocky/projects.html
+++ b/www/rocky/projects.html
@@ -1,106 +1 @@
-{% set projects = PROJECT_DATA[SERIES] %}
-{% extends "templates/base.tmpl" %}
-{% block pagetitle %}{{SERIES_TITLE}} Services and Libraries{% endblock %}
-{% block title %}
-
-
-
-
-
OpenStack {{SERIES_TITLE}} Projects
-
- This page contains project-specific documentation for
- OpenStack services and libraries.
-
-
-
-
-
-
-
-
-
-
-
-
OpenStack Services
-{% for project in projects|sort(attribute='service') %}
-{% if project.type in ['service', 'other'] and project.has_project_guide %}
-
- {{project.service}} ({{project.name}})
-{% endif %}
-{% endfor %}
-
-
-
-
Bare Metal Sub Projects
-{% for project in projects|sort(attribute='service') %}
-{% if project.type == 'baremetal' and project.has_project_guide %}
-
- {{project.service}} ({{project.name}})
-{% endif %}
-{% endfor %}
-
-
-
-
Networking Sub Projects
-{% for project in projects|sort(attribute='service') %}
-{% if project.type == 'networking' and project.has_project_guide %}
-
- {{project.service}} ({{project.name}})
-{% endif %}
-{% endfor %}
-
-
-
-
-
-
Contributor Tools
-{% for project in projects|sort(attribute='name') %}
-{% if project.type in ['tool'] and project.has_project_guide %}
-
{{project.name}}
-
{{project.service}}
-{% endif %}
-{% endfor %}
-
-
-
-
-
-
-
Using Libraries
-{% for project in projects|sort(attribute='name') %}
-{% if project.type == 'library' and project.has_project_guide %}
-
{{project.name}}
-
{{project.service}}
-{% endif %}
-{% endfor %}
-
-
-
-
-
-
-
Documentation treated like code, powered by the community - interested?
-
How To Contribute
-
-
-
-
-
-{% endblock content %}
+{% extends "templates/project_list.tmpl" %}
diff --git a/www/stein/projects.html b/www/stein/projects.html
index 7df0ed9f92..badd874e92 100644
--- a/www/stein/projects.html
+++ b/www/stein/projects.html
@@ -1,106 +1 @@
-{% set projects = PROJECT_DATA[SERIES] %}
-{% extends "templates/base.tmpl" %}
-{% block pagetitle %}{{SERIES_TITLE}} Services and Libraries{% endblock %}
-{% block title %}
-
Documentation > Services and Libraries
-{% endblock %}
-{% block content %}
-
-
-
-
-
-
OpenStack {{SERIES_TITLE}} Projects
-
- This page contains project-specific documentation for
- OpenStack services and libraries.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Contributor Tools
-{% for project in projects|sort(attribute='name') %}
-{% if project.type in ['tool'] %}
-
{{project.name}}
-
{{project.service}}
-{% endif %}
-{% endfor %}
-
-
-
-
-
-
-
Using Libraries
-{% for project in projects|sort(attribute='name') %}
-{% if project.type == 'library' %}
-
{{project.name}}
-
{{project.service}}
-{% endif %}
-{% endfor %}
-
-
-
-
-
-
-
Documentation treated like code, powered by the community - interested?
-
How To Contribute
-
-
-
-
-
-{% endblock content %}
+{% extends "templates/project_list.tmpl" %}
diff --git a/www/templates/project_list.tmpl b/www/templates/project_list.tmpl
new file mode 100644
index 0000000000..1cdd806556
--- /dev/null
+++ b/www/templates/project_list.tmpl
@@ -0,0 +1,106 @@
+{% set projects = PROJECT_DATA[SERIES] %}
+{% extends "templates/base.tmpl" %}
+{% block pagetitle %}{{SERIES_TITLE}} Services and Libraries{% endblock %}
+{% block title %}
+
Documentation > Services and Libraries
+{% endblock %}
+{% block content %}
+
+
+
+
+
+
OpenStack {{SERIES_TITLE}} Projects
+
+ This page contains project-specific documentation for
+ OpenStack services and libraries.
+
+
+
+
+
+
+
+
+
+
+
+
OpenStack Services
+{% for project in projects|sort(attribute='service') %}
+{% if project.type in ['service', 'other'] and project.has_project_guide %}
+
+ {{project.service}} ({{project.name}})
+{% endif %}
+{% endfor %}
+
+
+
+
Bare Metal Sub Projects
+{% for project in projects|sort(attribute='service') %}
+{% if project.type == 'baremetal' and project.has_project_guide %}
+
+ {{project.service}} ({{project.name}})
+{% endif %}
+{% endfor %}
+
+
+
+
Networking Sub Projects
+{% for project in projects|sort(attribute='service') %}
+{% if project.type == 'networking' and project.has_project_guide %}
+
+ {{project.service}} ({{project.name}})
+{% endif %}
+{% endfor %}
+
+
+
+
+
+
Contributor Tools
+{% for project in projects|sort(attribute='name') %}
+{% if project.type in ['tool'] and project.has_project_guide %}
+
{{project.name}}
+
{{project.service}}
+{% endif %}
+{% endfor %}
+
+
+
+
+
+
+
Using Libraries
+{% for project in projects|sort(attribute='name') %}
+{% if project.type == 'library' and project.has_project_guide %}
+
{{project.name}}
+
{{project.service}}
+{% endif %}
+{% endfor %}
+
+
+
+
+
+
+
Documentation treated like code, powered by the community - interested?
+
How To Contribute
+
+
+
+
+
+{% endblock content %}