gpt4 book ai didi

go - 在Go中执行模板后,是否可以使用新网址重定向页面?

转载 作者:行者123 更新时间:2023-12-01 22:33:11 33 4
gpt4 key购买 nike

我遇到的问题与this post几乎相同,但是那里的答案并没有真正让我清楚地知道如何解决它。

我想在用户提交表单后将数据发送到新页面,因此您自然会使用ExecuteTemplate包中的html/template

这会将页面重定向到带有数据的新页面,但URL保持不变。

这意味着,如果您使用http://example.com/loginExecuteTemplate上提交了表单,则会转到包含数据的新页面,但其URL仍显示http://example.com/login

我尝试将http.Redirect(w, r, "/newPage", http.StatusSeeOther)放在ExecuteTemplate代码之后,但是结果是相同的,这意味着页面已移动到包含数据的新页面,但是url保持http://example.com/login而不是获得http://example.com/newPage。有针对这个的解决方法吗?

我使用的是Go版本1.13.3。

最佳答案

您无需在重定向响应中显示模板。这也没有任何意义。

有两种方法可以达到所需的效果。

带有重定向

这是您的原始工作流程。您应该分三步来考虑此表单页面http://example.com/login:

  • 用户打开登录页面。然后显示正常的登录表单。
  • 用户提交登录表单。您会从登录表单中收到提交的内容,因此您将使用flag和data 将用户重定向到页面。
  • 用户已重定向。您发现您需要显示一个包含数据的表单/页面,而不显示该表单。

  • 但是您如何确定已达到(3)?一种方法是在重定向时将数据附加到URL。假设我们读取了“step = 2”的GET参数:

    func loginPage(w http.ResponseWriter, r *http.Request) {
    if r.URL.Query().Get("step") == "2" {
    // show the form / page described in (3) above.
    // ...
    return
    }

    // suppose your form method is POST
    if r.Method == "POST" {
    if err := r.ParseForm(); err != nil {
    // handle parse error
    }

    // handle form submission normally
    // also somehow store the form submitted value for later use
    // ...
    // ...

    // now redirect to the url, as described in (2)
    http.Redirect(w, r, "/login?step=2")
    return
    }

    // handle the normal form display as described in (1)
    // do your ExecuteTemplate
    }

    没有重定向

    另外,您也可以执行此操作而无需任何重定向。只需分两步思考一下:
  • 用户打开登录页面。然后显示正常的登录表单。
  • 用户提交登录表单。您发现您需要显示一个包含数据的表单/页面,而不显示该表单。没有重定向

  • func loginPage(w http.ResponseWriter, r *http.Request) {
    // suppose your form method is POST
    if r.Method == "POST" {
    if err := r.ParseForm(); err != nil {
    // handle parse error
    }

    // handle form submission normally
    // also somehow store the form submitted value for later use
    // ...
    // ...

    // handle the special form / page display as described in (2)
    // do your ExecuteTemplate
    // ...
    // ...

    return
    }

    // handle the normal form display as described in (1)
    // do your ExecuteTemplate
    }

    关于go - 在Go中执行模板后,是否可以使用新网址重定向页面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58448184/

    33 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com