为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。
?? 两个页面的结果如下:

时间: 2024-11-07 02:28:57

为Go Web App 创建一个主页面的相关文章

android创建一个细节页面,以及argument的应用

大家好..以前我也好奇过有没有一些设计模式可以用来创建一个细节页面,直到最近我看了一些设计模式相关的博文和书后,我终于发现了以下的应用. 下面我们介绍一个Listview 点击后出现一个detail 页面的功能,功能简单,但是我们看的是思想. 首先我们实现自定义的ListView,ListItem 里面有一个TextView,一个EditText,一个Checkbox,对应存放数据的是一个Crime的类.ListView里面有好多个ListItem,而对应的是CrimeList 类,为了方便创建

python web编程 创建一个web服务器

这里就介绍几个底层的用于创建web服务器的模块,其中最为主要的就是BaseHTTPServer,很多框架和web服务器就是在他们的基础上创建的 基础知识 要建立一个Web 服务,一个基本的服务器和一个“处理器”是必备的. 基础的(Web)服务器是一个必备的模具.它的角色是在客户端和服务器端完成必要HTTP 交互.在BaseHTTPServer 模块中你可以找到一个名叫HTTPServer 的服务器基本类. 处理器是一些处理主要“Web 服务”的简单软件.它们处理客户端的请求,并返回适当的文件,静

使用两个 Windows 窗体 DataGridView 控件创建一个主/从窗体

使用 DataGridView 控件的一种最常见方案是"主/详细信息"窗体,这样的窗体可显示两个数据库表之间的父/子关系.如果选择主表中的行,将导致以相应的子数据来更新详细信息表. 主/详细信息窗体很容易实现,这需要使用 DataGridView 控件和 BindingSource 组件之间的交互.在本演练中,将使用两个 DataGridView 控件和两个 BindingSource 组件来生成窗体.窗体将显示 Northwind SQL Server 示例数据库中的两个相关表:Cu

vue入门003~vue项目引入element并创建一个登录页面

上一节已经教大家如何创建一个vue项目,这一节,我们就温故下vue项目的创建,顺便引入element,实现一个简答的登陆页面. 老规矩,先看效果图 一,快速创建vue项目 二,引入element类库 首先我们进入element官网:https://element.eleme.cn/#/zh-CN/component/installation简单熟悉下element.然后如下图所示引入element类库.做完上面的操作后,不要忘记安装依赖. 三,在main.js里引入使用 如下图红色框里所示 四,

【2】按照Django官网,创建一个web app 创建app/创建相应的数据库表

1. Creating app $ python manage.py startapp polls That'll create a directory polls, which is laid out like this: polls/ __init__.py admin.py migrations/ __init__.py models.py tests.py views.py 1.1 Edit polls/models.py: from django.db import models cl

HTML学习笔记--实例-创建一个注册页面--select两个option出来结果却是四个选项,其中两个空白选项的原因?

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-

4)创建一个简单页面

1)简单页面的 基本样子: 2)创建步骤: 3)然后 现在的样子: 4) 添加那个图片(其实就是一个位图) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 将两个图片放到工程的第二个文件夹下: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~· ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Java Web项目--显示一个静态页面

我们可以在Eclipse中新建一个Dynamic Web Project,然后在项目的WebContent目录下新建一个Html文件page1.html,其内容如下: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>page1</title> </head> <body> A Normal Html Page! <

创建一个和页面等大的&lt;div&gt;

由于页面高度是一个缺省值,height: auto <div id=“di_1”></div> #di_1{ width: 100%; height: 100%; } body{ height:100%; } html{ height: 100%; }