mirror of
https://github.com/kataras/iris.git
synced 2025-02-02 15:30:36 +01:00
Merge branch 'master' into dev
Former-commit-id: a95af68b60eee434994d8bfa55ad26d587f4fe89
This commit is contained in:
commit
3349fd5c91
|
@ -259,7 +259,7 @@ convert any custom type into a response dispatcher by implementing the `mvc.Resu
|
|||
- [Embedding Templates Into App Executable File](view/embedding-templates-into-app/main.go)
|
||||
|
||||
|
||||
You can serve [quicktemplate](https://github.com/valyala/quicktemplate) files too, simply by using the `context#ResponseWriter`, take a look at the [http_responsewriter/quicktemplate](http_responsewriter/quicktemplate) example.
|
||||
You can serve [quicktemplate](https://github.com/valyala/quicktemplate) and [hero](https://github.com/shiyanhui/hero/hero) files too, simply by using the `context#ResponseWriter`, take a look at the [http_responsewriter/quicktemplate](http_responsewriter/quicktemplate) and [http_responsewriter/hero] examples.
|
||||
|
||||
### Authentication
|
||||
|
||||
|
@ -290,6 +290,7 @@ You can serve [quicktemplate](https://github.com/valyala/quicktemplate) files to
|
|||
### How to Write to `context.ResponseWriter() http.ResponseWriter`
|
||||
|
||||
- [Write `valyala/quicktemplate` templates](http_responsewriter/quicktemplate)
|
||||
- [Write `shiyanhui/hero` templates](http_responsewriter/hero)
|
||||
- [Text, Markdown, HTML, JSON, JSONP, XML, Binary](http_responsewriter/write-rest/main.go)
|
||||
- [Stream Writer](http_responsewriter/stream-writer/main.go)
|
||||
- [Transactions](http_responsewriter/transactions/main.go)
|
||||
|
|
26
_examples/http_responsewriter/hero/README.md
Normal file
26
_examples/http_responsewriter/hero/README.md
Normal file
|
@ -0,0 +1,26 @@
|
|||
# Hero Template Example
|
||||
|
||||
This folder contains the iris version of the original hero's example: https://github.com/shiyanhui/hero/tree/master/examples/app.
|
||||
|
||||
Iris is 100% compatible with `net/http` so you don't have to change anything else
|
||||
except the handler input from the original example.
|
||||
|
||||
The only inline handler's changes were:
|
||||
|
||||
From:
|
||||
|
||||
```go
|
||||
if _, err := w.Write(buffer.Bytes()); err != nil {
|
||||
// and
|
||||
template.UserListToWriter(userList, w)
|
||||
```
|
||||
To:
|
||||
```go
|
||||
if _, err := ctx.Write(buffer.Bytes()); err != nil {
|
||||
// and
|
||||
template.UserListToWriter(userList, ctx)
|
||||
```
|
||||
|
||||
So easy.
|
||||
|
||||
Read more at: https://github.com/shiyanhui/hero
|
55
_examples/http_responsewriter/hero/app.go
Normal file
55
_examples/http_responsewriter/hero/app.go
Normal file
|
@ -0,0 +1,55 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"log"
|
||||
|
||||
"github.com/kataras/iris/_examples/http_responsewriter/hero/template"
|
||||
|
||||
"github.com/kataras/iris"
|
||||
)
|
||||
|
||||
// $ go get -u github.com/shiyanhui/hero/hero
|
||||
// $ go run app.go
|
||||
//
|
||||
// Read more at https://github.com/shiyanhui/hero/hero
|
||||
func main() {
|
||||
|
||||
app := iris.New()
|
||||
|
||||
app.Get("/users", func(ctx iris.Context) {
|
||||
var userList = []string{
|
||||
"Alice",
|
||||
"Bob",
|
||||
"Tom",
|
||||
}
|
||||
|
||||
// Had better use buffer sync.Pool.
|
||||
// Hero exports GetBuffer and PutBuffer for this.
|
||||
//
|
||||
// buffer := hero.GetBuffer()
|
||||
// defer hero.PutBuffer(buffer)
|
||||
buffer := new(bytes.Buffer)
|
||||
template.UserList(userList, buffer)
|
||||
|
||||
if _, err := ctx.Write(buffer.Bytes()); err != nil {
|
||||
log.Printf("ERR: %s\n", err)
|
||||
}
|
||||
})
|
||||
|
||||
app.Get("/users2", func(ctx iris.Context) {
|
||||
var userList = []string{
|
||||
"Alice",
|
||||
"Bob",
|
||||
"Tom",
|
||||
}
|
||||
|
||||
// using an io.Writer for automatic buffer management (i.e. hero built-in buffer pool),
|
||||
// iris context implements the io.Writer by its ResponseWriter
|
||||
// which is an enhanced version of the standar http.ResponseWriter
|
||||
// but still 100% compatible.
|
||||
template.UserListToWriter(userList, ctx)
|
||||
})
|
||||
|
||||
app.Run(iris.Addr(":8080"))
|
||||
}
|
11
_examples/http_responsewriter/hero/template/index.html
Normal file
11
_examples/http_responsewriter/hero/template/index.html
Normal file
|
@ -0,0 +1,11 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<%@ body { %>
|
||||
<% } %>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,3 @@
|
|||
// Code generated by hero.
|
||||
// DO NOT EDIT!
|
||||
package template
|
3
_examples/http_responsewriter/hero/template/user.html
Normal file
3
_examples/http_responsewriter/hero/template/user.html
Normal file
|
@ -0,0 +1,3 @@
|
|||
<li>
|
||||
<%= user %>
|
||||
</li>
|
3
_examples/http_responsewriter/hero/template/user.html.go
Normal file
3
_examples/http_responsewriter/hero/template/user.html.go
Normal file
|
@ -0,0 +1,3 @@
|
|||
// Code generated by hero.
|
||||
// DO NOT EDIT!
|
||||
package template
|
11
_examples/http_responsewriter/hero/template/userlist.html
Normal file
11
_examples/http_responsewriter/hero/template/userlist.html
Normal file
|
@ -0,0 +1,11 @@
|
|||
<%: func UserList(userList []string, buffer *bytes.Buffer) %>
|
||||
|
||||
<%~ "index.html" %>
|
||||
|
||||
<%@ body { %>
|
||||
<% for _, user := range userList { %>
|
||||
<ul>
|
||||
<%+ "user.html" %>
|
||||
</ul>
|
||||
<% } %>
|
||||
<% } %>
|
41
_examples/http_responsewriter/hero/template/userlist.html.go
Normal file
41
_examples/http_responsewriter/hero/template/userlist.html.go
Normal file
|
@ -0,0 +1,41 @@
|
|||
// Code generated by hero.
|
||||
// DO NOT EDIT!
|
||||
package template
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
|
||||
"github.com/shiyanhui/hero"
|
||||
)
|
||||
|
||||
func UserList(userList []string, buffer *bytes.Buffer) {
|
||||
buffer.WriteString(`<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
`)
|
||||
for _, user := range userList {
|
||||
buffer.WriteString(`
|
||||
<ul>
|
||||
`)
|
||||
buffer.WriteString(`<li>
|
||||
`)
|
||||
hero.EscapeHTML(user, buffer)
|
||||
buffer.WriteString(`
|
||||
</li>
|
||||
`)
|
||||
|
||||
buffer.WriteString(`
|
||||
</ul>
|
||||
`)
|
||||
}
|
||||
|
||||
buffer.WriteString(`
|
||||
</body>
|
||||
</html>
|
||||
`)
|
||||
|
||||
}
|
|
@ -0,0 +1,11 @@
|
|||
<%: func UserListToWriter(userList []string, w io.Writer) (int, error)%>
|
||||
|
||||
<%~ "index.html" %>
|
||||
|
||||
<%@ body { %>
|
||||
<% for _, user := range userList { %>
|
||||
<ul>
|
||||
<%+ "user.html" %>
|
||||
</ul>
|
||||
<% } %>
|
||||
<% } %>
|
|
@ -0,0 +1,44 @@
|
|||
// Code generated by hero.
|
||||
// DO NOT EDIT!
|
||||
package template
|
||||
|
||||
import (
|
||||
"io"
|
||||
|
||||
"github.com/shiyanhui/hero"
|
||||
)
|
||||
|
||||
func UserListToWriter(userList []string, w io.Writer) (int, error) {
|
||||
_buffer := hero.GetBuffer()
|
||||
defer hero.PutBuffer(_buffer)
|
||||
_buffer.WriteString(`<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
`)
|
||||
for _, user := range userList {
|
||||
_buffer.WriteString(`
|
||||
<ul>
|
||||
`)
|
||||
_buffer.WriteString(`<li>
|
||||
`)
|
||||
hero.EscapeHTML(user, _buffer)
|
||||
_buffer.WriteString(`
|
||||
</li>
|
||||
`)
|
||||
|
||||
_buffer.WriteString(`
|
||||
</ul>
|
||||
`)
|
||||
}
|
||||
|
||||
_buffer.WriteString(`
|
||||
</body>
|
||||
</html>
|
||||
`)
|
||||
return w.Write(_buffer.Bytes())
|
||||
|
||||
}
|
Loading…
Reference in New Issue
Block a user