Golang网站开发之跳转逻辑实现和模版if操作

{app.params.name}}{app.params.name}}{app.params.name}}

当我们提交一个表单的时候,在遇到问题,需要跳转回去继续完善表单的时候,我们如何来处理这个跳转逻辑 首先我们要获取上个页面的地址当然如果你已经知道要跳转到哪个页面的话就会比较容易操作了

1、知道要跳转的地址

http.Redirect(w, r, 'articles/create.html', http.StatusSeeOther)

这个方式能够很直观的进行跳转操作

2、不知道要跳转的地址,但是需要获取referer来跳转

首选获取referer

referer := r.Referer()

然后解析获取里面的path,为什么不知道使用referer,如果referer中含有参数的话,我们直接拼接地址的话会出现参数混乱的问题,所以最好是通过解析后在重组的方式,这样有利于我们处理里面的参数

然后使用

u, err := url.Parse(referer)

这样我们就拿到了u这个参数,里面有个Path键值,可以直接获取到Path值

u.Path

之后稍加点逻辑处理下,将重组的URL赋值给Redirect的第三个参数

// 获取Get参数
q := u.Query()

// 删除存在的err_msg参数
q.Del("err_msg")

// 重组
nu := &url.URL{
	Scheme:   u.Scheme,
	Host:     u.Host,
	Path:     u.Path,
	RawQuery: q.Encode() + "&err_msg=参数异常",
}
// 跳转吧
http.Redirect(w, r, nu.String(), http.StatusSeeOther)

上面的逻辑整理后得到下面的方法

// BackWithQuery 回跳
func BackWithQuery(r \*http.Request, query string) string {
	u, err := url.Parse(r.Referer())
	if err != nil {
		log.Fatal("url Parse error:", err)
	}

	q := u.Query()

	q.Del("err_msg")

	nu := &url.URL{
		Scheme:   u.Scheme,
		Host:     u.Host,
		Path:     u.Path,
		RawQuery: q.Encode() + "&" + query,
	}

	return nu.String()
}

喜欢的拿走不谢

模板if操作

if操作举个例子,如下

{{ if .Msg }}
<div class="row">
  <div class="col-md-12">
    <div class="alert alert-danger">
    {{ .Msg }}
    </div>
  </div>
</div>
{{ end }}

具体参考官方文档 https://golang.org/pkg/text/template/ 比如如果在if中判断两个值相等,则搜索下eq ,eq后面有个空格

<select class="form-control" id="category_id" name="category_id">
  {{ if eq .autokid .CategoryID }}
  <option value="{{ .autokid }}" selected>{{ .name }}</option>
  {{ else }}
  <option value="{{ .autokid }}">{{ .name }}</option>
  {{ end }}
</select>

 

版权声明

durban创作并维护的 小绒毛的足迹博客采用创作共用保留署名-非商业-禁止演绎4.0国际许可证。

本文首发于 博客( https://www.xiaorongmao.com ),版权所有,侵权必究。

本文永久链接: https://www.xiaorongmao.com/blog/130


版权声明

durban创作并维护的 小绒毛的足迹博客采用创作共用保留署名-非商业-禁止演绎4.0国际许可证。

本文首发于 小绒毛的足迹博客( https://www.xiaorongmao.com ),版权所有,侵权必究。

本文永久链接: https://www.xiaorongmao.com/blog/130