将javascript变量发送到django视图

时间:2018-06-14 06:47:40

标签: javascript django django-forms

我在javascript变量(比如var_url)中获取浏览器的当前url(不断变化)。我有一个django模型Url。我想使用视图函数create_url()创建其对象。

早些时候当我使用表单时,我使用了request.POST['field']。现在我没有表单,我想传递var_url的值。怎么办?

当我使用表单时,这是我的查看功能:

def create_url(request):
if request.method == 'POST':
    text=request.POST['field']
    url_result=Url.objects.get_or_create(
        url_text=text
        )
    return HttpResponse('Url Object Created')

以下是我的表格:

<form name='urlForm' method="post" action="{% url 'create_url'%}" id="create" >
        {% csrf_token %}
        <input type="text" id="myurl" name="field"/>
        <input type="submit" name="submit" value="Submit">
    </form>

现在而不是表格,我有这个:

<div id='results'></div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script>
<script type="text/javascript">
    window.addEventListener('message',function(e){
        results.innerHTML = e.data;
    });
</script>

我想将div标签的内容发送到我的视图功能。

1 个答案:

答案 0 :(得分:0)

您有两种方法 - 使用form并使用ajax发送数据。

假设您在js中有result_data的数据。

首先,使用现有的form

通过这种方式,您必须将内部数据更新为表单字段(即隐藏result_data字段以发送表单数据)。

<form name='urlForm' method="post" action="{% url 'create_url'%}" id="create" >
    {% csrf_token %}
    <input type="text" id="myurl" name="field"/>
    <input type="hidden" name="result_data" value="" id="js_data_input">
    <input type="submit" name="submit" value="Submit">
</form> 

然后添加javascript代码,将result_data添加到隐藏的输入值。也许这样.. (我不擅长使用javascript,所以请按照自己的方式进行操作)

<script>
    $('#js_data_input').val(result_data)
</script>

然后只需提交包含此数据的表单。

其次,使用ajax

如果您在没有提交表单的情况下发送数据(这意味着没有重新加载/转义当前页面),您可以使用ajax

使用ajax时,您必须创建其他视图以接收您的ajax请求。

如果您不了解ajax,请查看w3school或其他网站。

这是使用ajax

发送result_data的示例
  $.ajax({
    type: "POST",
    url: '/your/path/to/ajax_view/url/',
    data: {
      'result_data': result_data,
      'csrfmiddlewaretoken': '{{ csrf_token }}'
    },
    dataType: "json",
    success: function(response) {
      if (response.result == 'ok') {
        alert(response.message);
      } else {
        alert('Failed');
      }
    }
  })
  

您必须添加csrfmiddlewaretoken。否则,你有403禁止错误。您可以通过js或仅使用django中的{{ csrf_token }}制作csrfmiddlewaretoken。