【问题标题】:Hide the text input field portion in a form's GET query url when the value is an empty string当值为空字符串时,隐藏表单的 GET 查询 url 中的文本输入字段部分
【发布时间】:2014-08-15 22:25:08
【问题描述】:

例如:http://127.0.0.1:8000/database/?reference_doi=&submit=Submit

我知道它看起来是一个html标准,但是有标签可以切换它,使空文本输入字符串不会出现在查询url中?

或者,由于我使用的是 Django,因此我尝试在我的视图中执行以下操作。

request_get_copy = request.GET.copy()
for key, value in request_get_copy.items():
    if not value or key == 'submit':
        request_get_copy.pop(key)

request.GET = request_get_copy
request.META['QUERY_STRING'] = request_get_copy.urlencode()

我通过我的模板在实际页面中显示了 request.GET 和 request.META['QUERY_STRING'] 以及 request 对象具有的几个方法,它们都给出了成功“纠正”的值,例如http://127.0.0.1:8000/database/ 但是由于GET 请求首先通过浏览器,显示的 url 仍然包含空字符串值部分。有什么我可以做的吗?

【问题讨论】:

  • 你的问题很不清楚,如果它没有值,你是否试图从查询字符串中删除一个键?
  • 是的,但不仅当我开始在后端处理它时,当她/他点击Submit 时,corrected 查询字符串也应该出现在用户的浏览器上。
  • 嗨 terencezl - 不,没有标签可以完成您的要求(也许有一天,但还没有)。不过,还有其他选择。这是一个与之前提出的问题非常相似的问题——但look herehere 需要进一步的建议。我在第一页上留下了关于使用 mod_rewrite 的回复,这可能比 Javascript 选项更强大。

标签: html django forms get


【解决方案1】:

您可以做的最简单的事情是重定向到您的固定网址:

fixed_url = request_get_copy.urlencode()
return redirect(fixed_url)

如果您仅在实际发生更改并且在任何数据库访问或繁重的工作之前这样做,那就更好了。

这意味着额外的 GET,但会给你想要的结果,我想这对你来说更有价值:)

如果 Javascript 是一个选项,您也可以在提交实际发生之前进行此更改,这有点复杂,但可以避免额外的请求。

编辑:为了清楚起见,没有办法“将其关闭”,您可以说这就是 HTTP 和浏览器的工作方式 :)

【讨论】:

  • 我想你的意思是reverse('some_namespace:database') + '?' + request_get_copy.urlencode()。是的,效果很好。
  • 如何检查查询字段是否真的被改变了?点击查询表单的“提交”并获取request.GET后,我如何知道表单之前所在的url,以便我可以比较他们的查询字符串(或解析的对象)?
  • 当使用表单进行查询时,这似乎是一个非常常规的问题。我敢肯定有人会厌倦看到所有的空值......并做一些事情而不是重定向。
  • 通过更改我只是意味着如果没有任何空白字段,您就不会重定向,但我想这很明显:) 我根本不认为这是一个问题,用户甚至不看 URL(这就是一些骗局的工作方式,哈哈),就我个人而言,我非常关心 URL 结构,但也认为显式优于隐式 :D。无论如何,就像我说的,这就是 HTTP 的工作方式,对于所有使用 Javascript 的“化妆” :) 你甚至可以控制 URL 看起来
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-11
  • 2012-01-23
  • 1970-01-01
  • 2021-09-21
  • 2013-02-16
  • 1970-01-01
相关资源
最近更新 更多