GoLang的HTML模板中的条件语句可以使用以下方式实现:

huangapple go评论87阅读模式
英文:

GoLang html template if condition

问题

我在Go中制作了一个网络应用程序,它在mysql数据库中搜索查询。一切都正常工作,但是我不知道如何实现以下功能:如果数据库中没有结果,则打印例如"没有产品"。目前,如果没有数据,代码不会打印任何内容。

我的index.html文件:

<!DOCTYPE html>
<html> 
<body>

<h2>选择查询</h2>

<form action="/database" method="POST">
  <label for="product">产品名称:</label><br>
  <input type="text" id="productID" name="productName" <br>
  <input type="submit" value="搜索">
</form>

{{if .}}
  <ul>
  {{range .}}
    <li>Name: {{.Name}}</li>
    <li>Price: ${{.Price}}</li>
    <br>
  {{end}}
{{end}}

</body>
</html>

我尝试添加{{else}}条件,但在这种情况下,"没有产品"会在查询搜索之前或页面加载时就被打印出来。

{{if .}}
  <ul>
  {{range .}}
    <li>Name: {{.Name}}</li>
    <li>Price: ${{.Price}}</li>
    <br>
  {{end}}

{{else}}
        <li>没有产品</li>
{{end}}

你能帮我吗?谢谢。

英文:

I made a web app in Go which search for a query in a mysql database. Everything works fine, but I do not know how to obtain following: if there is no result in database print e.g. "there is no product". Currently code does not print anything in case if there is no data.

My index.html file:

&lt;!DOCTYPE html&gt;
&lt;html&gt; 
&lt;body&gt;

&lt;h2&gt;Select Query&lt;/h2&gt;

&lt;form action=&quot;/database&quot; method=&quot;POST&quot;&gt;
  &lt;label for=&quot;product&quot;&gt;Product Name:&lt;/label&gt;&lt;br&gt;
  &lt;input type=&quot;text&quot; id=&quot;productID&quot; name=&quot;productName&quot; &lt;br&gt;
  &lt;input type=&quot;submit&quot; value=&quot;Search&quot;&gt;
&lt;/form&gt;

{{if .}}
  &lt;ul&gt;
  {{range .}}
    &lt;li&gt;Name: {{.Name}}&lt;/li&gt;
    &lt;li&gt;Price: ${{.Price}}&lt;/li&gt;
    &lt;br&gt;
  {{end}}
{{end}}

&lt;/body&gt;
&lt;/html&gt;

I tried to add {{else}} condition, but in this case "there is no product" is printed even before query search or when page is loaded.

{{if .}}
  &lt;ul&gt;
  {{range .}}
    &lt;li&gt;Name: {{.Name}}&lt;/li&gt;
    &lt;li&gt;Price: ${{.Price}}&lt;/li&gt;
    &lt;br&gt;
  {{end}}

{{else}}
        &lt;li&gt;there is no product&lt;/li&gt;
{{end}}

Can you help me please?

TIA

答案1

得分: 2

你可以使用range和else结合使用。

看看这个例子(你可以根据自己的代码进行简单调整):

{{range $item := .SearchData }}
    这里是 {{$item}} 
{{ else }}
    抱歉,没有找到匹配的结果
{{ end }}

链接:https://go.dev/play/p/7xJ1LXL2u09

或者在你的情况下:

<ul>
{{range .}}
    <li>名称:{{.Name}}</li>
    <li>价格:${{.Price}}</li>
    <br>
{{else}}
    <li>没有产品</li>
{{end}}
</ul>
英文:

You can use range with else

Check on this example (you can easily adapt to your code)

{{range $item := .SearchData }}
    Here we are {{ $item }} 
{{ else }}
    Sorry. No matching results found
{{ end }}

https://go.dev/play/p/7xJ1LXL2u09

Or in your case

  &lt;ul&gt;
  {{range .}}
    &lt;li&gt;Name: {{.Name}}&lt;/li&gt;
    &lt;li&gt;Price: ${{.Price}}&lt;/li&gt;
    &lt;br&gt;
  {{else}}
    &lt;li&gt;there is no product&lt;/li&gt;
  {{end}}
  &lt;/ul&gt;

答案2

得分: 0

当从数据库中进行扫描时,你可以使用sql.NullString来保存你的值,然后在模板中可以检查数据是否有效,如果有效,则访问其值。

type Response struct {
    Name  sql.NullString
    Price sql.NullInt64
}

HTML

<h2>Select Query</h2>

{{if .Name.Valid}}
  <ul>
  {{range .}}
    <li>Name: {{.Name.String}}</li>
    <li>Price: ${{.Price.String}}</li>
    <br>
  {{end}}
{{else}}
  <li>there is no product</li>
{{end}}

请注意,这只是一个示例代码和模板,用于展示如何在模板中检查数据的有效性并访问其值。具体的数据库查询和数据处理逻辑需要根据你的实际情况进行调整。

英文:

When scanning from the database, you can use sql.NullString to save your values,
and then in your template you can check if the data is valid, and if it is, access its value.

type Response struct {
Name     sql.NullString
Price        sql.NullInt64
}

HTML

&lt;h2&gt;Select Query&lt;/h2&gt;

{{if .Name.Valid}}
  &lt;ul&gt;
  {{range .}}
    &lt;li&gt;Name: {{.Name.String}}&lt;/li&gt;
    &lt;li&gt;Price: ${{.Price.String}}&lt;/li&gt;
    &lt;br&gt;
  {{end}}
{{else}}
&lt;li&gt;there is no product&lt;/li&gt;
{{end}}

huangapple
  • 本文由 发表于 2022年3月24日 04:53:18
  • 转载请务必保留本文链接:https://go.coder-hub.com/71593918.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定