【问题标题】:Django: Convert form data into 'clean url'Django:将表单数据转换为“干净的 url”
【发布时间】:2017-09-05 04:45:04
【问题描述】:

假设我有以下表格:

<form id="search-form" class="form-horizontal" method="GET" action="/results/" role="form">
    <input type="text" class="form-control" id="query" name="query">

    <button type="submit"  form="search-form" class="btn btn-primary">
        <span class="glyphicon glyphicon-search" aria-hidden="true"></span>       
    </button>
</form>

目前,当提交表单时,url 包含查询作为参数,例如:www.&lt;my-domain&gt;.com/results?query=&lt;some-query&gt;。但是,出于 SEO 的目的,我想将其转换为“干净的 url”,看起来更像这样:www.&lt;my-domain&gt;.com/results/&lt;some-query&gt;

我对我的 urls.py 做了以下修改:

urlpatterns = [
    ...
    url(r'^results/(?P<query>[a-zA-Z ]+)$', views.ResultsView.as_view(), name="results"),
    ...
]

所以我应该能够像这样在我的 ResultsView 中获取查询值:

class ResultsView(TemplateView):

    def dispatch(self, request, *args, **kwargs):

        query = kwargs.get('query')

如何提交表单以使其与相应的 url 模式匹配?我试过摆弄将输入 id 传递给它的表单操作,如下所示:action="/results/query/",但显然,它认为query 是一个文字字符串,并且不会用输入的值替换它。

【问题讨论】:

  • 您需要使用 Js,因为您无法通过标准 django 方法将输入值粘贴为像 /results/query/ 这样的 url 字符串的一部分
  • @marni 是的,这是有道理的。不过,我在 JS 方面并不是那么出色。如果您可以发布一个工作示例,我会将答案标记为正确。
  • 即使你以SEO为目的工作,你也应该使用GET方法,更干净更容易

标签: python html django forms clean-urls


【解决方案1】:

您可以使用 JQuery 轻松完成此操作。单击按钮时,阻止默认操作,并在 window.location.href 中定义它应该重定向到的 url。

<script>
    $(document).ready(function () {
        $("button").click(function (e) {
            e.preventDefault();
            query = $("#query").val();
            window.location.href = location.origin + "/results/" + query;
        });
    });
</script>

别忘了添加依赖

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js">

【讨论】:

  • 正是我想要的。谢谢!
猜你喜欢
  • 2016-12-21
  • 1970-01-01
  • 1970-01-01
  • 2012-05-04
  • 1970-01-01
  • 1970-01-01
  • 2016-08-11
  • 2012-12-24
  • 2023-01-20
相关资源
最近更新 更多