【问题标题】:Set a variable through a drop down list in django通过django中的下拉列表设置变量
【发布时间】:2020-11-11 07:52:12
【问题描述】:
def scan(request):
    scan = Stock.objects.all()
    hammer = Stock.objects.filter(Hammer=100)
    belthold = Stock.objects.filter(Belthold=100)

    context = {'All':scan, 'Belthold':belthold, 'Hammer':hammer

    }

    return render(request, 'scanner/scan.html', context)

这是我的views.py 文件。我想在我的 html 页面中添加一个下拉列表,其中包含更改查询过滤器的上下文字典。

这是我当前的 html 页面:

{% for i in Hammer %}

       <tr>
           <td>{{i.script}}</td>
           <td>{{i.open}}</td>
           <td>{{i.high}}</td>
           <td>{{i.low}}</td>
           <td>{{i.close}}</td>
           <td>{{i.Volume}}</td>
           <td>{{i.Change}}</td>
       </tr>

{% endfor %} 

“锤子”需要替换为下拉列表中的任何选择。

谢谢!!

【问题讨论】:

标签: django django-views django-templates django-queryset


【解决方案1】:

您不能在 for 循环模板中动态更改 Hammer。您可以使用下面的方法,也可以根据您希望所有内容的显示方式更改方法。

您必须为此使用 Javascript。您首先需要为 for 循环中的所有标签提供 id。

<td id="{{i.script}}_myid"> ...

然后使用 Javascript 访问下拉菜单值的更改,然后相应地更新相应的 td:

document.getElementbyId('dropdown').addEventListener('change', function(e) {
// Change td's here: document.getElementbyId(..._myid).innerHTML = "" })

要在您的 JS 中传递 Hammer,您可以执行内联脚本(许多人不推荐)或在下面添加一个单独的 JS 文件作为脚本标记。您可以使用序列化程序将对象从 Python 传递到 JS。

【讨论】:

  • 我在编码方面完全是个菜鸟,你能不能让它更详细一点...谢谢!如果你能写代码,我已经尝试了好几天了
  • 我自己不是专家。但基本上你已经了解了 3 件事来回答你的问题,并且考虑到你最接近你的应用程序,你将能够弄清楚。第一个 Django 序列化器:可以在他们的文档网站上找到;下一个基本的 javascript 和元素跟踪:Youtube 上的许多视频和第三次更新:可以通过第二个建议来完成;还有很多视频。
  • 好的,我会这样做的。但请澄清一下:1)通过定义 id,你的意思是为每个 td 分配一个唯一的数字,如 1、2、3 或 id1、id2 等。2)“在此处更改 td”;那就是我将整个 td 代码更改为 id 的地方?以及“getElementbyId(..._myid)”和内部 html 是什么?一点帮助将不胜感激!谢谢
  • 1.是的,您将为 tds 提供一个唯一的 ID。 2. 然后使用该唯一 ID 在文档(当前页面)中“找到”它们,然后更改其中的内容。结果是'getElementbyId',而innerHTML就是这样...... td标签中的内部html。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-09
  • 2018-06-16
相关资源
最近更新 更多