【问题标题】:Pass Django Variable Via Javascript通过 Javascript 传递 Django 变量
【发布时间】:2018-06-28 01:52:08
【问题描述】:

我是 Javascript 新手,想弄清楚如何在我的 HTML 表单中获取变量的值。我有以下代码工作,我发出警报以测试我的逻辑并且 else 语句正在工作,但如果值设置为 on,我似乎无法弄清楚如何让 Javascript 提交我的表单。我知道我的值被正确解释,因为我也用警报对其进行了测试。它似乎不想提交表单。我查看了 SO,似乎 Javascript 提交语法可能已经改变?这是我的 Javascript 函数:

document.getElementById('ifon').onclick = function(){
  var getval = Checkbox(this.form);
  if (getval == 'on') {
    document.getElementById("data").submit();
}  else {
    alert(getval);
  }
}

这是我的相关表单的 HTML:

<form id="data" name="form_name" action="{% url 'foo:bar' record.id %}">
  <input type='hidden' name='status' value="Delete">
</form>

我是 Javascript 新手,所以也许我遗漏了一些东西。这是一个复选框,Javascript 似乎知道基于我的测试的值是什么。我似乎无法提交表单。提前感谢您的帮助。

只是为了简化问题和我对 Javascript 的理解,我已经玩了一些,并且可以确认我已经掌握了基础知识。这是我的表格...

<form id="data" name="form_name" action="{% url 'foo:bar' record.id %}" method="POST">
  <input type='hidden' name='status' value="Delete">
</form>

<script>
function submitform()
 {
    document.form_name.submit();
 }
 </script>

此代码似乎不起作用。也没有错误消息。

基本的 Javascript 原则正在发挥作用,就像我将脚本更改为简单的...

<script>
function submitform()
 {
   alert("hi!");
 }
 </script>

我实际上看到了一个弹出窗口,上面写着你好!这一切都基于具有下面概述的 onclick 的按钮。这一切都很好。

  <button type="button" onclick="submitform()" class="button9"><h3 class="txtalgn1">Link</h3></button></a>

在我的安装中,Javascript 的基础知识似乎有效。我更新了我的观点,包括以下内容:

class BookUpdateView(LoginRequiredMixin,NeverCacheMixin,UpdateView):
    model = Book
template_name = 'book/book_update.html'
form_class = book_Update        

@method_decorator(csrf_exempt)
def dispatch(self, request, *args, **kwargs):
    return super(BookUpdateView, self).dispatch(request, *args, **kwargs)

def form_valid(self, form):
    self.kwargs['status'] = form.cleaned_data['status']
    return super(BookUpdateView, self).form_valid(form)

但是 Javascript 提交似乎仍然无法正常工作,或者如果它没有根据状态执行删除...

【问题讨论】:

  • 您告诉表单自己提交,但它应该提交到哪里?该表单没有设置目的地的操作参数。
  • 丹尼尔·罗斯曼感谢您的指导。我在表单中添加了一个操作参数,但它似乎没有帮助。我正在使用 Django 表单,这会影响解决方案吗?
  • 不,你所做的一切毫无意义。 action 属性是表单提交到的 URL。
  • 既然你指出它没有动作参数,我认为这就是你的意思。
  • 罗斯曼的意思是史蒂夫,是表单动作没有指定要提交的 URL。用 django 的话来说,它应该指向一个调用视图或其他东西的 URL。请给我们更多的范围,以便为您提供帮助。

标签: javascript jquery html django python-3.x


【解决方案1】:

这是在 javascript 中执行所需操作的方法,基本上,您将自定义类添加到模板中的检查控件(我假设您正在使用复选框控件来处理我在代码中看到的内容),然后捕获它,询问是否被选中,然后提交到您已经建立的网址:

$('.mycheck').click(function(){
      if ($(this).is(':checked')){
          var frm = document.getElementById("data");
          frm.submit();
      }
});

【讨论】:

    【解决方案2】:

    如果您使用的是 django,则需要在 django 端正确编码的视图(和 url)。请注意by default csrf protection is on,您需要在 django 视图中添加一个 csrf_exempt 装饰器,或者使用 this method 从您的页面检索 csrf 令牌

    如果您使用表单,您的视图应该如下所示:

    def myview(request):
        if request.method == 'POST':
            form = yourimportedform(request.POST)
            if form.is_valid():
                yourvariable = form.cleaned_data['yourdataname']
    

    编辑:如果您正在运行开发服务器,您应该能够在您启动它的终端中实时查看 http 调用的日志。这应该有助于您找到错误所在。

    【讨论】:

    • 我认为这可能是问题所在。因此,我没有解决这个问题,这是我的 Javascript 代码无法正常工作的原因。我会进一步调查。感谢您的意见。
    猜你喜欢
    • 2011-10-19
    • 2011-09-24
    • 2011-07-23
    • 1970-01-01
    • 1970-01-01
    • 2014-05-05
    • 2013-05-20
    • 2014-12-23
    • 1970-01-01
    相关资源
    最近更新 更多