为Go Web App 创建一个主页面
大多数web app都有一个相同的布局。这个布局可能包含一个header或者footer,甚至可能包含一个导航菜单。Go的标准库提供一个简单的方式来创建这些基本元素,通过被不同的页面重用,创建出模板页的效果。
这个简单的例子来解释如何实现的:
让我们来创建一个简单的包含两个view的web app,一个是 main 一个是about。这两个view都有相同的header和footer。
header模板的代码如下:
{{ define "header" }}
<!DOCTYPE html>
<html>
<head>
<title>{{.Title}}</title>
<link rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap.min.css">
<link rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap-theme.min.css">
<style type="text/css">
body {padding-bottom: 70px;}
.content {margin:10px;}
</style>
</head>
<body>
<nav class="navbar navbar-default" role="navigation">
<div class="navbar-header">
<a class="navbar-brand" href="/">Go App</a>
</div>
<div class="collapse navbar-collapse navbar-ex1-collapse">
<ul class="nav navbar-nav">
<li><a href="/">Main</a></li>
<li><a href="/about">About</a></li>
</ul>
</div>
</nav>
{{ end }}
footer模板的代码如下:
{{ define "footer" }}
<p class="navbar-text navbar-fixed-bottom">Go Rocks!</p>
<script src="//netdna.bootstrapcdn.com/bootstrap/3.0.0/js/bootstrap.min.js"></script>
</body>
</html>
{{ end }}
main 模板的代码如下:
{{define "main"}}
{{template "header" .}}
<div class="content">
<h2>Main</h2>
<div>This is the Main page</div>
</div>
{{template "footer" .}}
{{end}}
about 模板的代码如下:
{{define "about"}}
{{template "header" .}}
<div class="content">
<h2>About</h2>
<div>This is the About page</div>
</div>
{{template "footer" .}}
{{end}}
服务器代码如下:
package main import (
"html/template"
"net/http"
) //Compile templates on start
var templates = template.Must(template.ParseFiles("header.html", "footer.html", "main.html", "about.html")) //A Page structure
type Page struct {
Title string
} //Display the named template
func display(w http.ResponseWriter, tmpl string, data interface{}) {
templates.ExecuteTemplate(w, tmpl, data)
} //The handlers.
func mainHandler(w http.ResponseWriter, r *http.Request) {
display(w, "main", &Page{Title: "Home"})
} func aboutHandler(w http.ResponseWriter, r *http.Request) {
display(w, "about", &Page{Title: "About"})
} func main() {
http.HandleFunc("/", mainHandler)
http.HandleFunc("/about", aboutHandler) //Listen on port 8080
http.ListenAndServe(":8080", nil)
}
每一个模板页都有一个define "name" 的命令来定义模板的名字。main和about页面通过template "name"来包含header和footer。”.” 出入上下文来命名模板。现在,不管main和about页面如何执行,他们的页面都会包含header和footer。
两个页面的结果如下:


为Go Web App 创建一个主页面的更多相关文章
- Progressive Web App是一个利用现代浏览器的能力来达到类似APP的用户体验的技术——不就是chrome OS吗?
什么是Progressive Web App? Progressive Web App是一个利用现代浏览器的能力来达到类似APP的用户体验的技术,由Google实现,让浏览器打开的网址像APP一样运行 ...
- python web编程 创建一个web服务器
这里就介绍几个底层的用于创建web服务器的模块,其中最为主要的就是BaseHTTPServer,很多框架和web服务器就是在他们的基础上创建的 基础知识 要建立一个Web 服务,一个基本的服务器和一个 ...
- 使用两个 Windows 窗体 DataGridView 控件创建一个主/从窗体
使用 DataGridView 控件的一种最常见方案是“主/详细信息”窗体,这样的窗体可显示两个数据库表之间的父/子关系.如果选择主表中的行,将导致以相应的子数据来更新详细信息表. 主/详细信息窗体很 ...
- 20 如何通过pycharm快速的创建一个html页面
1.打开pycharm并且新建一个html页面,如下图所示. 2.删除html页面中默认的内容,之后在页面中输入!,之后点击tab即可完成一个html页面的框架新增.
- 【2】按照Django官网,创建一个web app 创建app/创建相应的数据库表
1. Creating app $ python manage.py startapp polls That'll create a directory polls, which is laid ou ...
- 【1】按照Django官网,编写一个web app 创建project/配置数据库
1. Creating a project From the command line, cd into a directory where you'd like to store your code ...
- 如何创建一个asp页面
Active Server Pages(ASP)文件是以 .asp 为扩展名的文本文件,这个文本文件可以包括下列部分的任意组合: 文本 HTML 标记 ASP 脚本命令 创建 .asp 文件非常容易. ...
- 为APP加入一个欢迎页面
###添加软件闪图使用的方法: new Handler().postDelayed(new Runnable() { @Override public vo ...
- Java Web项目--显示一个静态页面
我们可以在Eclipse中新建一个Dynamic Web Project,然后在项目的WebContent目录下新建一个Html文件page1.html,其内容如下: <!DOCTYPE htm ...
随机推荐
- 【HDU】2829 Lawrence
http://acm.hdu.edu.cn/showproblem.php?pid=2829 题意:将长度为n的序列分成p+1块,使得$\sum_{每块}\sum_{i<j} a[i]a[j]$ ...
- 20145330《Java程序设计》第二次实验报告
20145330<Java程序设计>第二次实验报告 实验二 Java面向对象程序设计 实验内容 1.初步掌握单元测试和TDD 2.理解并掌握面向对象三要素:封装.继承多态 3.初步掌握UM ...
- return和finally的执行顺序
创建一个类,新建一个方法: public class Demo { public int get() { int x=1; try { x++; return x; }finally{ ++x; } ...
- HDU 3584 树状数组
Cube Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/65536 K (Java/Others)Total Submi ...
- rdp爆破工具 Fast RDP Brute
http://stascorp.com/load/1-1-0-58 Fast RDP Brute dservers.ru/wp-content/uploads/2013/11/frdpb2.zip
- linux查看主机端口进程命令
1.查看主机信息 # more /etc/hosts # Do not remove the following line, or various programs # that require ne ...
- NBUT比赛 方格规律递推题
题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=26901#problem/A 题意:有一个 2*n的格子里,你可以选择任意一个格 ...
- PowerDesigner的使用一
首先我们需要创建一个测试数据库,为了简单,我们在这个数据库中只创建一个Student表和一个Major表.其表结构和关系如下所示. 看看怎样用PowerDesigner快速的创建出这个数据库吧. 1. ...
- 数的长度---nyoj69
超时 #include <stdio.h>#include <string.h>#define M 1000001int shu[M]; int main(){ int n, ...
- psutil 是因为该包能提升 memory_profiler 的性能
python 性能分析入门指南 一点号数据玩家昨天 限时干货下载:添加微信公众号"数据玩家「fbigdata」" 回复[7]免费获取[完整数据分析资料!(包括SPSS.SAS.SQ ...