草庐IT

go - 将数据范围传递给 HTML 模板

coder 2024-07-05 原文

我已将虚拟数据插入数据库。

示例打印函数根据控制台中的代码打印 13 及其正方形。但是我需要将整个数据传递给 HTML 模板(索引),在那里我可以看到一个表格,其中包含所有传递的数字及其各自的平方数。

如何在索引 HTML 中传递这些数据?

数字 x 数字 = SquareNumber 1 x 1 = 1 2×2 = 4 3 x 3 = 9 ... 等等。

func main() {

    db, err := sql.Open("mysql", "root:@/godb")
    if err != nil {
        panic(err.Error())  
    }

    defer db.Close() 

 stmtIns, err := db.Prepare("INSERT INTO squarenum VALUES(?, ?, ? )") // ? = 
placeholder
    if err != nil {
        panic(err.Error()) }

    defer stmtIns.Close() 

 stmtOut, err := db.Prepare("SELECT squareNum FROM squareNum WHERE number = 
 ?")
    if err != nil {
        panic(err.Error()) 
    }

    defer stmtOut.Close()

    for i := 1; i < 50; i++ {
        _, err = stmtIns.Exec(0,i, (i * i)) 
        if err != nil {
            panic(err.Error()) 
        }
    }

    err = stmtOut.QueryRow(13).Scan(&squareNum) // WHERE number = 13
    if err != nil {
 panic(err.Error()) // proper error handling instead of panic in your app

    }
    tRes:=pageData{}
    tRes.SquareNum=squareNum
    fmt.Printf("The square number of 13 is: %d \n", squareNum)


    // Query another number.. 1 maybe?
    err = stmtOut.QueryRow(1).Scan(&squareNum) // WHERE number = 1
    if err != nil {
 panic(err.Error()) // proper error handling instead of panic in your app
    }
    fmt.Printf("The square number of 1 is: %d \n", squareNum)
    http.HandleFunc("/",idx)
    http.ListenAndServe(":8888", nil)
}

func idx(w http.ResponseWriter, r *http.Request) {

    pd := pageData{
        SquareNum: squareNum,
        }

    err := tpl.ExecuteTemplate(w, "index.html", pd)
    if err != nil {
        log.Println("LOGGED", err)
http.Error(w, "Internal server error", http.StatusInternalServerError)
        return
    }
}

最佳答案

package main

import (
    "html/template"
    "os"
)

// here is your template
const tplString = `
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>{{.Title}}</title>
</head>
<body>
{{range .Dummies}}
<div>Square of {{.Number}} is {{.Square}}</div>
{{end}}
</body>
</html>
`

var (
    tpl *template.Template
    err error
)

// the dummydata you talked about
type DummyData struct {
    Number int
    Square int
}

//some PageData just with dummies and a title
type PageData struct {
    Title   string
    Dummies []*DummyData
}

//here you would be using your sql queries
func createSomeDummies(amount int) []*DummyData {
    dummies := make([]*DummyData, amount)
    for i := 0; i < amount; i++ {
        dd := new(DummyData)
        dd.Number = i
        dd.Square = i * i
        dummies[i] = dd
    }
    return dummies
}

func main() {
    pd := new(PageData)
    pd.Title = "Hello Dummies"
    pd.Dummies = createSomeDummies(10)

    tpl = template.New("index")
    tpl, err = tpl.Parse(tplString)
    if err != nil {
        panic(err)
    }
    err = tpl.Execute(os.Stdout, pd)
    if err != nil {
        panic(err)
    }
}

此代码段创建一个 PageData 结构来保存虚拟数据条目数组和网页标题。

type PageData struct {
    Title   string
    Dummies []*DummyData
}

然后它使用函数创建 10 个虚拟数据结构。 然后将该数组分配给 PageData 的 Dummmies 字段。

pd.Dummies = createSomeDummies(10)

此函数是您的 sql 查询函数的占位符,您只需循环遍历您的 sql 行,而不是像我一样手动创建它们。

func createSomeDummies(amount int) []*DummyData {
    dummies := make([]*DummyData, amount)
    for i := 0; i < amount; i++ {
        dd := new(DummyData)
        dd.Number = i
        dd.Square = i * i
        dummies[i] = dd
    }
    return dummies
}

模板本身会像这样插入标题: <title>{{.Title}}</title>

Dummies 本身由范围模板指令插入,其工作方式类似于 for 迭代器。 需要注意的一件事是,在此循环内,所有数据都指向 DummyData 项而不是 PageData

{{range .Dummies}}
<div>Square of {{.Number}} is {{.Square}}</div>
{{end}}

然后解析模板。错误将停止执行并打印错误消息。

tpl = template.New("index")
tpl, err = tpl.Parse(tplString)
if err != nil {
    panic(err)
}

最后模板将被渲染到标准输出。要在 http 处理程序中使用,您必须改用 http.ResponseWriter。 错误再次停止执行并打印错误消息。

err = tpl.Execute(os.Stdout, pd)
if err != nil {
    panic(err)
}

这里的工作示例: Go Playground

关于go - 将数据范围传递给 HTML 模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48148497/

有关go - 将数据范围传递给 HTML 模板的更多相关文章

  1. ruby - 使用 ruby​​ 将 HTML 转换为纯文本并维护结构/格式 - 2

    我想将html转换为纯文本。不过,我不想只删除标签,我想智能地保留尽可能多的格式。为插入换行符标签,检测段落并格式化它们等。输入非常简单,通常是格式良好的html(不是整个文档,只是一堆内容,通常没有anchor或图像)。我可以将几个正则表达式放在一起,让我达到80%,但我认为可能有一些现有的解决方案更智能。 最佳答案 首先,不要尝试为此使用正则表达式。很有可能你会想出一个脆弱/脆弱的解决方案,它会随着HTML的变化而崩溃,或者很难管理和维护。您可以使用Nokogiri快速解析HTML并提取文本:require'nokogiri'h

  2. ruby - 解析 RDFa、微数据等的最佳方式是什么,使用统一的模式/词汇(例如 schema.org)存储和显示信息 - 2

    我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i

  3. ruby - 通过 erb 模板输出 ruby​​ 数组 - 2

    我正在使用puppet为ruby​​程序提供一组常量。我需要提供一组主机名,我的程序将对其进行迭代。在我之前使用的bash脚本中,我只是将它作为一个puppet变量hosts=>"host1,host2"我将其提供给bash脚本作为HOSTS=显然这对ruby​​不太适用——我需要它的格式hosts=["host1","host2"]自从phosts和putsmy_array.inspect提供输出["host1","host2"]我希望使用其中之一。不幸的是,我终其一生都无法弄清楚如何让它发挥作用。我尝试了以下各项:我发现某处他们指出我需要在函数调用前放置“function_”……这

  4. ruby-on-rails - Rails HTML 请求渲染 JSON - 2

    在我的Controller中,我通过以下方式在我的index方法中支持HTML和JSON:respond_todo|format|format.htmlformat.json{renderjson:@user}end在浏览器中拉起它时,它会自然地以HTML呈现。但是,当我对/user资源进行内容类型为application/json的curl调用时(因为它是索引方法),我仍然将HTML作为响应。如何获取JSON作为响应?我还需要说明什么? 最佳答案 您应该将.json附加到请求的url,提供的格式在routes.rb的路径中定义。这

  5. ruby-on-rails - 使用 Sublime Text 3 突出显示 HTML 背景语法中的 ERB? - 2

    所以我在关注Railscast,我注意到在html.erb文件中,ruby代码有一个微弱的背景高亮效果,以区别于其他代码HTML文档。我知道Ryan使用TextMate。我正在使用SublimeText3。我怎样才能达到同样的效果?谢谢! 最佳答案 为SublimeText安装ERB包。假设您安装了SublimeText包管理器*,只需点击cmd+shift+P即可获得命令菜单,然后键入installpackage并选择PackageControl:InstallPackage获取包管理器菜单。在该菜单中,键入ERB并在看到包时选择

  6. ruby - 触发器 ruby​​ 中 3 点范围运算符和 2 点范围运算符的区别 - 2

    请帮助我理解范围运算符...和..之间的区别,作为Ruby中使用的“触发器”。这是PragmaticProgrammersguidetoRuby中的一个示例:a=(11..20).collect{|i|(i%4==0)..(i%3==0)?i:nil}返回:[nil,12,nil,nil,nil,16,17,18,nil,20]还有:a=(11..20).collect{|i|(i%4==0)...(i%3==0)?i:nil}返回:[nil,12,13,14,15,16,17,18,nil,20] 最佳答案 触发器(又名f/f)是

  7. ruby-on-rails - 相关表上的范围为 "WHERE ... LIKE" - 2

    我正在尝试从Postgresql表(table1)中获取数据,该表由另一个相关表(property)的字段(table2)过滤。在纯SQL中,我会这样编写查询:SELECT*FROMtable1JOINtable2USING(table2_id)WHEREtable2.propertyLIKE'query%'这工作正常:scope:my_scope,->(query){includes(:table2).where("table2.property":query)}但我真正需要的是使用LIKE运算符进行过滤,而不是严格相等。然而,这是行不通的:scope:my_scope,->(que

  8. ruby - 当使用::指定模块时,为什么 Ruby 不在更高范围内查找类? - 2

    我刚刚被困在这个问题上一段时间了。以这个基地为例:moduleTopclassTestendmoduleFooendend稍后,我可以通过这样做在Foo中定义扩展Test的类:moduleTopmoduleFooclassSomeTest但是,如果我尝试通过使用::指定模块来最小化缩进:moduleTop::FooclassFailure这失败了:NameError:uninitializedconstantTop::Foo::Test这是一个错误,还是仅仅是Ruby解析变量名的方式的逻辑结果? 最佳答案 Isthisabug,or

  9. ruby - Ruby 有 `Pair` 数据类型吗? - 2

    有时我需要处理键/值数据。我不喜欢使用数组,因为它们在大小上没有限制(很容易不小心添加超过2个项目,而且您最终需要稍后验证大小)。此外,0和1的索引变成了魔数(MagicNumber),并且在传达含义方面做得很差(“当我说0时,我的意思是head...”)。散列也不合适,因为可能会不小心添加额外的条目。我写了下面的类来解决这个问题:classPairattr_accessor:head,:taildefinitialize(h,t)@head,@tail=h,tendend它工作得很好并且解决了问题,但我很想知道:Ruby标准库是否已经带有这样一个类? 最佳

  10. ruby-on-rails - Ruby url 到 html 链接转换 - 2

    我正在使用Rails构建一个简单的聊天应用程序。当用户输入url时,我希望将其输出为html链接(即“url”)。我想知道在Ruby中是否有任何库或众所周知的方法可以做到这一点。如果没有,我有一些不错的正则表达式示例代码可以使用... 最佳答案 查看auto_linkRails提供的辅助方法。这会将所有URL和电子邮件地址变成可点击的链接(htmlanchor标记)。这是文档中的代码示例。auto_link("Gotohttp://www.rubyonrails.organdsayhellotodavid@loudthinking.

随机推荐