如何从 Django 中的 GET 参数创建漂亮的 url?
Posted
技术标签:
【中文标题】如何从 Django 中的 GET 参数创建漂亮的 url?【英文标题】:How do I create pretty url from the GET parameters in Django? 【发布时间】:2015-07-28 06:11:59 【问题描述】:我的查询字符串是由一个带有姓名和年龄的表单生成的,看起来像这样,
www.example.com/?name=Martin&age=19&place=RU
表格,
<form action="" method="get">
Name: <input type="text" name="name"><br>
Age: <input type="text" name="age"><br>
Place <input type="text" name="place"><br>
<input type="submit" value="Submit">
</form>
我想让提交给 django 的 url 成为
www.example.com/Martin/19/RU
我该怎么做?我应该在form
或urls.py
上修改什么?
谢谢
【问题讨论】:
这是表单在发出 GET 请求时所做的事情。它与 Django 无关,只是 html 标准。您可以使用 javascript 覆盖此行为或使用 POST 隐藏 URL 中的参数。但请记住,填充的表单与普通链接非常不同,并且您想要的行为不是 HTML 表单的通常工作方式。 @KlausD。谢谢,我正在寻找一些解决方案以使其成为可能,我猜可能是发布请求重定向会有所帮助, 【参考方案1】:<script>
function changeAction()
var profile_form = document.getElementById('profileform');
if(profile_form)
var txt = "http://www.example.com/";
var i;
for (i = 0; i < profile_form.length; i++)
txt = txt + profile_form.elements[i].value + "/";
profile_form.action = txt;
</script>
在你的 html 中,你需要这样的东西:
<form action="" method="get" id="profileForm" onsubmit="changeAction()">
Name: <input type="text" name="name"><br>
Age: <input type="text" name="age"><br>
Place <input type="text" name="place"><br>
<input type="submit" value="Submit">
</form>
我想这应该可以解决问题。
【讨论】:
只是一个评论...你实际上并不需要|| null
部分,因为.getElementById()
将返回null
if the element is not in the document
是的,不需要。已更正。
你应该使用 encodeURIComponent(profile_form.elements[i].value) 来确保它是 url 兼容的!以上是关于如何从 Django 中的 GET 参数创建漂亮的 url?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 django rest 框架从 GET 请求的查询参数中过滤多个 id?
我如何使用 django urlresolvers 反向传递 GET 参数