go blue-jay / blueprint,如何在控制器中分配变量并在html / template视图中使用它?

时间:2018-04-18 02:26:03

标签: go

blue-jay / blueprint是一个MVC(https://blue-jay.github.io/views/)快速入门golang webapp,带有针对mysql的CRUD和其他开箱即用的功能。

'struct'中的数据库字段没有问题,那些正在加载和渲染正常。如何声明与数据库字段或'struct'无关的变量。

控制器/类别/ category.go:

// Package category provides a simple CRUD in a web page.
package category

import (
   "net/http"

   "github.com/blue-jay/blueprint/lib/flight"
   "github.com/blue-jay/blueprint/middleware/acl"
   "github.com/blue-jay/blueprint/model/category"
   "github.com/blue-jay/core/form"
   "github.com/blue-jay/core/pagination"
   "github.com/blue-jay/core/router"
)

var (
  uri = "/categories"
)

// Load routes.
func Load() {
   c := router.Chain(acl.DisallowAnon)
   router.Get(uri, Index, c...)
   router.Get(uri+"/create", Create, c...)
   router.Post(uri+"/create", Store, c...)    
}

// Create displays html page.    
func Create(w http.ResponseWriter, r *http.Request) {
   c := flight.Context(w, r)
   v := c.View.New("categories/create")  
   v.Vars["test"] = "Testing"  <--- VARIABLE IN QUESTION

   form.Repopulate(
     r.Form,
     v.Vars,
     "parent_id",
     "title",
     "icon",
     "description",
     "url",
     "sort",
     "status_id",
     "guid_id",
     "role_id",
     "user_id")
     v.Render(w, r)
}

查看/分类/ create.tmpl

{{define "title"}}New Category{{end}}
{{define "head"}}{{end}}
{{define "content"}}
   <div class="page-header"><h1>{{template "title" .}}</h1></div>   
   {{ .test }}  <--- VARIABLE IN QUESTION
   {{template "footer" .}}
{{end}}
{{define "foot"}}{{end}}

为了简洁起见,我已经删除了大部分表格和模型(型号/类别/ category.go)。

我们在这里寻找的是如何从控制器中创建和填充变量“test”,并让它在模板中显示其值“Testing”。目前,它输出什么都没有。

令我感到困惑的是,我已经声明了一个变量'guid',并在另一个控制器(看起来是这样的)中调用它(在func Index中的“controller / register / register.go”并在/ view / register中输出/index.tmpl在下面的github链接中找到。)这似乎工作正常。我找不到我在做什么不同。我显然不明白的东西。

其余代码:https://github.com/iamtoc/blueprint-ledger

进入golang只有几天,所以还是很新的。知道如何做到这一点?谢谢!

1 个答案:

答案 0 :(得分:1)

我已经检查了你的github存储库,发现了很多像

这样的破坏导入
"github.com/blue-jay/blueprint/model/category"
用您的回购路径blue-jay/blueprint替换iamtoc/blueprint-ledger后,我能够运行原始代码

v.Vars["test"] = "Testing"  <--- VARIABLE IN QUESTION

   form.Repopulate(
     r.Form,
     v.Vars,
     "parent_id",
...

没有任何问题,可以看到打印出的测试模板变量。 我怀疑,你只是错误地复制了原始的蓝杰/蓝图项目,因为我还用原始仓库测试了这个案例,并且它再次按预期工作。