使用按键代替Django表单中的按钮

2024-05-15 01:59:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个网站,允许文本输入,对条目进行投票,以及投票条目的实时表格: http://www.highscore.a2hosted.com/index/

这是用django编码的。我设法在一页纸上找到了一个文本条目和一张投票表。在

文本输入: 当按下enter键时,文本条目将向数据库(sqlite3)添加一个新条目。一点javascript将输入绑定到要发送到的keypress视图.py,它使用GET来添加文本和当前日期时间。没有使用表单,位置在js中被重新加载。在

投票表 投票表单是POST方法,您有两个提交按钮来对显示的文本进行上下投票。显示的文本是从html中的“for循环”访问的。此更新自视图.py作为刷新页面时最新的未引导文本。在

在投票功能中视图.py,则发送向上或向下按钮的名称以及正在投票的条目的id。投票从条目的分数中增减,保存它,并刷新页面。在

物理安装 我的下一步是构建一个使用web架构的物理安装。最终安装不会在一个页面上,所以会有一个投票站和一个入口站。我将使用街机按钮,使进入和投票按下。在

街机按钮>;游戏杆编码器>;Joy2Key Mapper 我有连接到零延迟操纵杆编码器的街机按钮,并有Joy2Key运行按钮映射到13(回车)38(向上箭头)和40(向下箭头)。在

所有这些都可以很好地与文本输入(操纵杆按钮映射到输入按钮13)。在

我遇到的问题是试图获取密钥来处理django表单。 由于投票使用表单,django希望在按钮区域单击鼠标。我正努力避开这个问题。我得到的最接近的方法是在投票表单中放置一个多余的文本输入框来捕捉关键活动。在

当该框处于活动状态时,我可以按下映射到向上箭头的按钮,并在命令提示符中看到一些POST反馈(但它还没有发送投票)。如果我单击文本输入框,我可以按映射到enter按钮的按钮,并在命令提示符下获得反馈并成功地输入文本。在

我的问题是。。。。。如果没有大量的外部库或花哨的gamepadapi编码,有没有一种整洁的方法可以让django表单按钮只在键盘按下时工作?如果需要一个活动框,是否可以隐藏并全屏显示?(我已经试过了,但还没有运气)


Tags: django方法py文本目的视图表单编码
1条回答
网友
1楼 · 发布于 2024-05-15 01:59:06

好吧,我就是这么做的。在

在一个新的投票.html,我有这个代码来捕捉操纵杆映射到的箭头按钮:

<div id="Vote" class = "high">
  <div style="text-align: center">
  {% for entry in voting_entry_list %} 
    <li><a href="/entries/{{ entry.id }}/">{{ entry.text }}&nbsp{{ entry.score }}</a></li>
    <p>
    <input type="submit" id="voteid" name='voteid' value="{{ entry.id }}" autofocus value="" onfocus="this.value = this.value;" class = "transparent"/>
          <script>
            $(document).ready(function() {
              $("#voteid").bind("keydown", function(e) { //input type=id above
                if (e.keyCode == 38) {
                  var text = $("#voteid").val();        
                  var args = {'voteid':text};       
                  $.get("/voteup/", args).done(function(data) {
                    console.log("message: " + data);
                    location.reload();  
                  });
                return false;
                }
                if (e.keyCode == 40) {
                  var text = $("#voteid").val();        
                  var args = {'voteid':text};       
                  $.get("/votedown/", args).done(function(data) {
                    console.log("message: " + data);
                    location.reload();  
                  });
                return false;
                }       
              });
            });     
          </script>
  {% endfor %}
  </div>
</div>

然后进来视图.py,我用GET而不是POST来获取上下选票:

^{pr2}$

这似乎避免了表单和按键的任何问题。因为它在一个单独的投票页面上,透明的虚拟提交按钮使该选择在刷新时处于活动状态,而不是在同一页面上的文本输入框。我可以从voting_entry_list访问排序的条目,并使用单独的js脚本和视图.py每个按钮的请求。在

我的目标是用基本的django和js来实现这一点,对安装大量的库或编写额外的代码没有信心游戏板.api州和投票,工作完成了!。在

目前,这是一个混球,但似乎是坚实的。将来,我可能会尝试使用switch来简化按键,如果这是一个安全问题,可能会尝试使用POST而不是GET。在

相关问题 更多 >

    热门问题