mirror of
https://github.com/kataras/iris.git
synced 2025-01-23 02:31:04 +01:00
add the View engine and move the DI chapter outside of the Routing one
parent
b774aafbec
commit
26a1071427
5
Home.md
5
Home.md
|
@ -18,11 +18,14 @@ This wiki is the main source of documentation for **developers** working with (o
|
|||
* [[Subdomains|Routing-subdomains]]
|
||||
* [[Wrap the Router|Routing-wrap-the-router]]
|
||||
* [[Override Context|Routing-override-context]]
|
||||
* [[Dependency Injection|Routing-dependency-injection]]
|
||||
* [[API Versioning]]
|
||||
* [[File Server]]
|
||||
* [[View]]
|
||||
* [[Dependency Injection|dependency-injection]]
|
||||
* [[MVC]] **TODO chapter**
|
||||
* [[Cookies]]
|
||||
|
||||
|
||||
> This new wiki is a `Work In Progress` in an effort to centralize the documentation and concepts explanation into a single place.
|
||||
|
||||
## Runnable Examples
|
||||
|
|
0
MVC.md
Normal file
0
MVC.md
Normal file
148
View.md
Normal file
148
View.md
Normal file
|
@ -0,0 +1,148 @@
|
|||
Iris offers support for **6 template parsers out of the box** through its universal [View Engine](https://godoc.org/github.com/kataras/iris/view#Engine). Of course developers can stil use various go template parsers as the `Context.ResponseWriter()` completes the `http.ResponseWriter` and `io.Writer`.
|
||||
|
||||
Iris puts some common rules and features that their original parsers don't support by default. For example we have support for `yield`, `render`, `render_r`, `current`, `urlpath` template funcs and `Layouts` and `binding` accross middlewares and **embedded template files** for all Engines.
|
||||
|
||||
To use the unique features of each template you have to read and learn by reading their documentation. Choose what fits your app's needs the most.
|
||||
|
||||
Let's see the list of the built-in view engines:
|
||||
|
||||
| Engine | Declaration | Underline Template Parser
|
||||
| -----------|-------------|-------------|
|
||||
| std template/html | `iris.HTML(...)` | [html/template](https://golang.org/pkg/html/template/) package |
|
||||
| django | `iris.Django(...)` | [flosch/pongo2](https://github.com/flosch/pongo2) package |
|
||||
| handlebars | `iris.Handlebars(...)` | [Joker/jade](https://github.com/Joker/jade) package |
|
||||
| amber | `iris.Amber(...)` | [aymerick/raymond](https://github.com/aymerick/raymond) package |
|
||||
| pug(jade) | `iris.Pug(...)` | [eknkc/amber](https://github.com/eknkc/amber) package |
|
||||
| jet | `iris.Jet(...)` | [CloudyKit/jet](https://github.com/CloudyKit/jet) package |
|
||||
|
||||
One or more view engines can be registered in the same Application. To **register** a view engine use the `RegisterView(ViewEngine)` method.
|
||||
|
||||
Load all templates from the "./views" folder
|
||||
where extension is ".html" and parse them
|
||||
using the standard `html/template` package.
|
||||
|
||||
```go
|
||||
// [app := iris.New...]
|
||||
tmpl := iris.HTML("./views", ".html")
|
||||
app.RegisterView(tmpl)
|
||||
```
|
||||
|
||||
To **render or execute** a view use the `Context.View` method inside the main route's handler.
|
||||
|
||||
```go
|
||||
ctx.View("hi.html")
|
||||
```
|
||||
|
||||
To **bind** Go values with key-value pattern inside a view through middleware or main handler use the `Context.ViewData` method before the `Context.View` one.
|
||||
|
||||
Bind: `{{.message}}` with `"Hello world!"`.
|
||||
|
||||
```go
|
||||
ctx.ViewData("message", "Hello world!")
|
||||
```
|
||||
|
||||
To bind a Go **model** to a view you have two options:
|
||||
|
||||
- `ctx.ViewData("user", User{})` - variable binding as `{{.user.Name}}` for example
|
||||
- `ctx.View("hello.html", User{})` - root binding as `{{.Name}}` for example.
|
||||
|
||||
To **add a template function** use the `AddFunc` method of the preferred view engine.
|
||||
|
||||
```go
|
||||
// func name, input arguments, render value
|
||||
tmpl.AddFunc("greet", func(s string) string {
|
||||
return "Greetings " + s + "!"
|
||||
})
|
||||
```
|
||||
|
||||
To **reload on local file changes** call the view enginne's `Reload` method.
|
||||
|
||||
```go
|
||||
tmpl.Reload(true)
|
||||
```
|
||||
|
||||
To use **embedded** files and not depend on local file system use the [go-bindata](https://github.com/go-bindata/go-bindata) external tool and pass its `Asset` and `AssetNames` functions to the `Binary` method of the preferred view engine.
|
||||
|
||||
```go
|
||||
tmpl.Binary(Asset, AssetNames)
|
||||
```
|
||||
|
||||
Example Code:
|
||||
|
||||
Please read the _comments_ too.
|
||||
|
||||
```go
|
||||
// file: main.go
|
||||
package main
|
||||
|
||||
import "github.com/kataras/iris"
|
||||
|
||||
func main() {
|
||||
app := iris.New()
|
||||
|
||||
// Parse all templates from the "./views" folder
|
||||
// where extension is ".html" and parse them
|
||||
// using the standard `html/template` package.
|
||||
tmpl := iris.HTML("./views", ".html")
|
||||
|
||||
// Enable re-build on local template files changes.
|
||||
tmpl.Reload(true)
|
||||
|
||||
// Default template funcs are:
|
||||
//
|
||||
// - {{ urlpath "myNamedRoute" "pathParameter_ifNeeded" }}
|
||||
// - {{ render "header.html" }}
|
||||
// and partial relative path to current page:
|
||||
// - {{ render_r "header.html" }}
|
||||
// - {{ yield }}
|
||||
// - {{ current }}
|
||||
// Register a custom template func:
|
||||
tmpl.AddFunc("greet", func(s string) string {
|
||||
return "Greetings " + s + "!"
|
||||
})
|
||||
|
||||
// Register the view engine to the views,
|
||||
// this will load the templates.
|
||||
app.RegisterView(tmpl)
|
||||
|
||||
// Method: GET
|
||||
// Resource: http://localhost:8080
|
||||
app.Get("/", func(ctx iris.Context) {
|
||||
// Bind: {{.message}} with "Hello world!"
|
||||
ctx.ViewData("message", "Hello world!")
|
||||
// Render template file: ./views/hi.html
|
||||
ctx.View("hi.html")
|
||||
})
|
||||
|
||||
app.Run(iris.Addr(":8080"))
|
||||
}
|
||||
```
|
||||
|
||||
```html
|
||||
<!-- file: ./views/hi.html -->
|
||||
<html>
|
||||
<head>
|
||||
<title>Hi Page</title>
|
||||
</head>
|
||||
<body>
|
||||
<h1>{{.message}}</h1>
|
||||
<strong>{{greet "to you"}}</strong>
|
||||
</body>
|
||||
</html>
|
||||
```
|
||||
|
||||
Open a browser tab at http://localhost:8080.
|
||||
|
||||
The **rendered result** will look like this:
|
||||
|
||||
```html
|
||||
<html>
|
||||
<head>
|
||||
<title>Hi Page</title>
|
||||
</head>
|
||||
<body>
|
||||
<h1>Hello world!</h1>
|
||||
<strong>Greetings to you!</strong>
|
||||
</body>
|
||||
</html>
|
||||
```
|
|
@ -13,7 +13,9 @@
|
|||
* [[Subdomains|Routing-subdomains]]
|
||||
* [[Wrap the Router|Routing-wrap-the-router]]
|
||||
* [[Override Context|Routing-override-context]]
|
||||
* [[Dependency Injection|Routing-dependency-injection]]
|
||||
* [[API Versioning]]
|
||||
* [[File Server]]
|
||||
* [[View]]
|
||||
* [[Dependency Injection|dependency-injection]]
|
||||
* [[MVC]] **TODO chapter**
|
||||
* [[Cookies]]
|
||||
|
|
Loading…
Reference in New Issue
Block a user