Django:将表单数据转换为 'clean url'
Django: Convert form data into 'clean 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>
。但是,出于 SEO 目的,我想将其转换为 'clean 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
是一个文字字符串,并且不会用值替换它输入。
您可以使用 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">
假设我有以下形式:
<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>
。但是,出于 SEO 目的,我想将其转换为 'clean 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
是一个文字字符串,并且不会用值替换它输入。
您可以使用 JQuery 轻松做到这一点。单击按钮时,防止默认操作,并在 window.location.href
.
<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">