2017-09-05 75 views
1

比方說,我有以下形式:Django的:將表單數據爲「乾淨的URL」

<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.<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') 

我怎樣才能提交表單,以便與相應的url模式匹配?我已經嘗試過將表單動作傳遞給它的輸入ID,如下所示:action="/results/query/",但很明顯,它認爲query是一個文字字符串,並且不會將其替換爲輸入的值。

+0

您需要使用JS,因爲你不能輸入值粘貼爲URL字符串等的一部分這個'/查詢/'/結果通過standart django方法 – AndMar

+0

@marni是的,這是有道理的。雖然我對JS並不是很了不起。如果你可以發佈一個工作示例,我會將答案標記爲正確。 – Sam

+0

即使你使用SEO的目的,你應該使用GET方法,更清潔和更容易 –

回答

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"> 
+1

正是我在找什麼。謝謝! – Sam