【问题标题】:Django: How can I call a view function from template?Django:如何从模板调用视图函数?
【发布时间】:2013-07-10 01:24:46
【问题描述】:

我有一个关于如何从模板 HTML 按钮调用视图函数的问题?像 onclick 功能? 这是模板:

<input id="submit" type="button" onclick="xxx" method="post" value="Click" />

views.py 是:

def request_page(request):
    ...do something...
    return render_to_response("/directory.html", {})

非常感谢。

【问题讨论】:

    标签: django templates view


    【解决方案1】:

    假设您想在用户单击“单击”按钮时从 html 文本框中的用户输入中获取一个值,然后调用您在 mypythoncode.py 中编写的 python 函数 (mypythonfunction)。请注意,“btn”类是在 css 文件中定义的。

    在templateHTML.html中:

    <form action="#" method="get">
     <input type="text" value="8" name="mytextbox" size="1"/>
     <input type="submit" class="btn" value="Click" name="mybtn">
    </form>
    

    view.py 内部:

    import mypythoncode
    
    def request_page(request):
      if(request.GET.get('mybtn')):
        mypythoncode.mypythonfunction( int(request.GET.get('mytextbox')) )
    return render(request,'myApp/templateHTML.html')
    

    【讨论】:

    • 这是一个很好的答案 - 没有更多的投票感到惊讶......你在自己的项目中使用过这个吗?
    • 我很高兴它有用。是的,我在 Github 上上传了一个项目,我在那里使用它。 github.com/MahshidZ/ArchivIT
    • 小心,GET 和 HEAD 请求应该是安全的/幂等的。 w3.org/Protocols/rfc2616/rfc2616-sec9.html
    • 输入后的{% csrf_token %}呢?
    【解决方案2】:

    一种选择是,您可以用form 包裹submit 按钮

    类似这样的:

    <form action="{% url path.to.request_page %}" method="POST">
        <input id="submit" type="button" value="Click" />
    </form>
    

    (去掉onclickmethod

    如果您想加载页面的特定部分,而不需要重新加载页面 - 您可以这样做

    <input id="submit" type="button" value="Click" data_url/>
    

    submit 监听器上

    $(function(){
         $('form').on('submit', function(e){
             e.preventDefault();
             $.ajax({
                 url: $(this).attr('action'),
                 method: $(this).attr('method'),
                 success: function(data){ $('#target').html(data) }
             });
         });
    });
    

    【讨论】:

    • 是的.. 这就是 ajax 提交正在做的事情。你的问题不清楚,所以我添加了两个答案
    • 我想知道有没有办法在 Django 中进行多线程处理?以下是问题:stackoverflow.com/questions/17601698/…
    • Django-Notification 可能是您正在寻找的。这和这个问题有什么关系?
    • @karthikr 您必须将第一个 sn-p 中的输入更改为 type="submit"
    【解决方案3】:

    这个怎么样:

    <a class="btn btn-primary" href="{% url 'url-name'%}">Button-Text</a>
    

    该类包括主按钮的引导样式。

    【讨论】:

      【解决方案4】:

      您可以将输入放在这样的表单中:-

      <script>
          $(document).ready(function(){
              $(document).on('click','#send', function(){
                  $('#hid').val(data)
                  document.forms["myForm"].submit();
              })
          })
      </script>
      
      <form id="myForm" action="/request_page url/" method="post">
          <input type="hidden" id="hid" name="hid"/>
      </form>
      <div id="send">Send Data</div>
      

      【讨论】:

        【解决方案5】:

        例如,注销按钮可以这样写:

        <button class="btn btn-primary" onclick="location.href={% url 'logout'%}">Logout</button>
        

        注销端点在哪里:

        #urls.py:
        url(r'^logout/$', auth_views.logout, {'next_page': '/'}, name='logout'),
        

        【讨论】:

          【解决方案6】:

          删除所有数据:

          HTML 文件

            class="btn btn-primary" href="{% url 'delete_product'%}">Delete
          

          将上面的代码放在一个锚标记中。 (a 标签!)

          url.py

          path('delete_product', views.delete_product, name='delete_product')]
          

          views.py

          def delete_product(request):
              if request.method == "GET":
                  dest = Racket.objects.all()
                  dest.delete()
                  return render(request, "admin_page.html")
          

          【讨论】:

            猜你喜欢
            • 2014-08-18
            • 1970-01-01
            • 2014-09-01
            • 2019-01-30
            • 2010-10-22
            • 1970-01-01
            • 2011-03-11
            • 2015-03-17
            • 2011-01-03
            相关资源
            最近更新 更多