将 javascript 变量发送到 django 视图 [英] Send a javascript variable to django view

查看:22
本文介绍了将 javascript 变量发送到 django 视图的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

之前当我使用表单时,我使用了request.POST['field'].现在我没有表单,我想传递 var_url 的值.怎么做?

这是我使用表单时的视图函数:

def create_url(request):如果 request.method == 'POST':text=request.POST['field']url_result=Url.objects.get_or_create(url_text=文本)return HttpResponse('Url 对象创建')

以下是我的表格:

<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"></表单>

现在,我有了这个:

<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){结果.innerHTML = e.data;});

我想将 div 标签的内容发送到我的视图函数.

解决方案

你有两种方式 - 使用 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"></表单>

然后您添加 javascript 代码以将您的 result_data 添加到您的隐藏输入值中.也许像这样..(我不擅长 javascript,所以按你自己的方式)

然后只需提交包含这些数据的表单.

二、使用ajax

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

使用ajax时,你必须创建其他视图来接收你的ajax请求.

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

这是使用ajax发送result_data的示例

 $.ajax({类型:POST",url: '/your/path/to/ajax_view/url/',数据: {'result_data':result_data,'csrfmiddlewaretoken': '{{ csrf_token }}'},数据类型:json",成功:功能(响应){if (response.result == 'ok') {警报(响应.消息);} 别的 {alert('失败');}}})

<块引用>

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

I am fetching the current url of the browser (which keeps changing) in a javascript variable (say var_url). I have a django model Url. I want to create its object using a view function create_url().

Earlier When I used a form, I used request.POST['field']. Now I don't have a form and I want to pass the value of var_url. How can that be done?

This was my view function when I was using a form:

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

And the following was my form:

<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>

Now rather than a form, I have this:

<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>

I want to send the content of div tag to my view function.

解决方案

You have two way - using form and using ajax for sending data.

Assume that you have data called result_data in js.

First, use existing form

In this way, you have to update your inner data to form field (i.e. make hidden result_data field to send form 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> 

Then you add javascript code to add your result_data to your hidden input value. Maybe like this.. (I'm not good at javascript, so make it your own way)

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

Then just submit your form with this data.

Second, use ajax

If you send your data without submit form (it means that not reload/escape current page), you can use ajax.

When using ajax, you have to make other view that receive your ajax request.

If you don't know about ajax, please check w3school or other web site.

This is example for send result_data using ajax

  $.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');
      }
    }
  })

You have to add csrfmiddlewaretoken. Else, you got 403 forbidden error. You can make csrfmiddlewaretoken by js or just using {{ csrf_token }} from django.

这篇关于将 javascript 变量发送到 django 视图的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆