如何从 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

我该怎么做?我应该在formurls.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中的GET参数中提取带有索引的数组

如何使用 django rest 框架从 GET 请求的查询参数中过滤多个 id?

如何在Django中接收JSON格式的数据

我如何使用 django urlresolvers 反向传递 GET 参数

如何将从表单提交中检索到的参数作为参数传递给 django 中的函数

如何在django模板中读取传递过去的字典参数中的某一项?