2017-09-05 3 views
1

のは、私は次の形式を持っているとしましょう:www.<my-domain>.com/results?query=<some-query>:フォームが送信されたとき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はそうのようなパラメータとしてクエリを、含まれています。しかし、SEOの目的のために、これを「きれいなURL」に変換したいと考えています。これは次のようになります: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

を追加することを忘れないでください。スタンダードdjan​​goの方法で – AndMar

+0

@マルニええ、それは理にかなっています。私はJSで素晴らしいことではない。実際の例を掲載できる場合は、正しい答えとしてマークします。 – Sam

+0

SEOの目的で仕事をしている場合でも、GETメソッドを使用する必要があります。清潔で簡単です –

答えて

1

これはJQueryで簡単に行うことができます。ボタンをクリックすると、デフォルトのアクションを防ぎ、リダイレクトするURLをwindow.location.hrefに定義します。

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

は、あなたがこの `/結果/クエリ/`のようなURL文字列の一部として入力された値を貼り付けることはできませんので、あなたはそれのためのJSを使用する必要がある依存関係に

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

まさに私が探していたものです。ありがとう! – Sam

関連する問題