I see that the question is from a few months ago but I think it is interesting.
The doGet function, how doPost, receives queries through the type URL:
direccion.es/page?parameter=value&otherParameter=otherValue ... you can add more ...
We will respond to a parameter to dynamically load a default page, the main one, and another one:
File Code.gs
1- var rutaWeb = ScriptApp.getService().getUrl();
2- function doGet(e) {
3- var page = e.parameter.p || "Web";
4- return HtmlService.createTemplateFromFile(page).evaluate();
5- }
Route of the web page to be used later.
The doGet function receives parameters (e)
I used the letter 'p' (e.parameter. p ) to pass the value of the page I want to load to the 'page' variable. You will see how a little later in the html pages. I have used '||' to indicate that in the case of not existing
parameter 'p' pass 'Web' to the variable (page). 'Web' is the name of the home page.
doGet returns the page passed through the 'p' parameter as an html template.
Web.html (default homepage)
<!DOCTYPE html>
<html>
<head>
<base target="_top">
</head>
<body>
<h1>Página principal</h1>
<p>Dale: <a href="<?!= rutaWeb + '?p=Alumno' ?>">Página Alumno</a></p>
</body>
</html>
The HREF attribute of the link is a Scriptlet that concatenates the path of the web that we keep as a variable (Webpath) with the parameter 'p' and its value 'Student' which is the name of another page, to which it carries the link.
Student.html (the other page)
<!DOCTYPE html>
<html>
<head>
<base target="_top">
</head>
<body>
<h1>Alumnos</h1>
<p>Puedes volver a la página <a href="<?!= rutaWeb ?>">Principal</a></p>
</body>
</html>
Note that to return to the main page we do not include any parameters, remember in (Code.gs) the construction of the variable 'page'.
You can test how it works.
Sharing project.