如何将值/参数从HTML传递到Django Views?

时间:2017-11-24 02:45:12

标签: python django

我通常会在ajax中这样做。

但是,例如,如果我有一个按钮和一个具有查询值的搜索输入框,我该如何传递搜索值(可能还有多个未通过表单字段获取的值/参数)< / em>按钮上的Django视图点击到网址?

HTML

 <div>
    <input id="search" name="search" type="text" class="query-search" placeholder="Search...">
    <a class="btn btn-primary btn-lg btn-space col-sm-3" href="{% url 'routes_view' %}">View Routes</a>
 </div>

视图

def view_detail(request): 
   ...
   <How to get values from HTML without using ajax? Or its the only way?>

网址

url(r'^view/', views.view_detail, name='view_detail')

3 个答案:

答案 0 :(得分:3)

从上一个答案中了解,如果您不希望将搜索值作为URL参数发送,您可以通过AJAX POST调用发送它们并在视图中处理它,如下所示:

<div>
    <input id="search" name="search" type="text" class="query-search" placeholder="Search...">
    <input onclick="setGetParameter()" type="button" class="btn btn-primary" value = "View Details"/>
</div>


<script>

function setGetParameter(){
    var search_word = $("#search").val();
    $.ajax({
      type: "POST",
      url: {% url 'view_detail' %},
      data: search_word,
      success: function(result){
        alert("Success");
      }
    });
}
</script>

您的观点应该是这样的。

def search_view(request):
    if request.method == "POST":
        search_word = request.POST['data']

网址配置将保持其他答案描述的方式。

答案 1 :(得分:2)

如果您不想在网址中传递值,可以创建HTML表单并使用post方法提交表单。

<div>
<form action="{% url 'view_detail' %}" method="post">
{% csrf_token %}
<input id="search" name="search" type="text" class="query-search" 
 placeholder="Search...">
<input class="btn btn-primary" type="submit" value="submit">
</form>
</div>

然后在您的视图中,您可以将数据作为request.POST.get(&#39; search&#39;)获取:

def view_detail(request):
    searchWord = request.POST.get('search','')
    return HttpResponse(searchWord)

以同样的方式可以传递多个参数。

答案 2 :(得分:1)

您可以使按钮在模板中像链接一样工作,并在onclick事件上添加js函数,然后获取搜索输入值并将搜索参数添加到网址window.location.href

<div>
    <input id="search" name="search" type="text" class="query-search" placeholder="Search...">
    <input onclick="setGetParameter()" type="button" class="btn btn-primary" value = "View Details"/>
</div>


<script>

function setGetParameter(){
    searchWord = document.getElementById('search').value;
    window.location.href = "{% url 'view_detail' %}" + "?search="+searchWord;
}
</script>

在视图中,您可以使用request.GET.get('search')获取从模板输入的参数(搜索内容),如下所示:

def view_detail(request):
    searchWord = request.GET.get('search')
    return HttpResponse(searchWord)
顺便说一下,urlpatterns看起来像这样:

urlpatterns = [
    url(r'^$', views.index, name='index'),
    url(r'^view$', views.view_detail, name='view_detail'),
]