Django:将表单数据转换为' clean url'

时间:2017-09-05 04:45:04

标签: python html django forms clean-urls

我们说我有以下形式:

<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>

目前,提交表单时,网址会将查询作为参数包含在内,如下所示:www.<my-domain>.com/results?query=<some-query>。但是,出于搜索引擎优化的目的,我想将其转换为“干净的网址”,这看起来更像是:www.<my-domain>.com/results/<some-query>

我对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')

如何提交表单以便与相应的网址格式匹配?我尝试过将输入ID传递给它的表单操作,如下所示:action="/results/query/",但很明显,它认为query是一个文字字符串,并且不会替换它与输入的值。

1 个答案:

答案 0 :(得分: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">