【问题标题】:How to pass in info associated with which button was pressed in Django templates?如何传递与在 Django 模板中按下哪个按钮相关的信息?
【发布时间】:2020-11-03 13:03:52
【问题描述】:

我创建了一个名为 Store 的模型对象并将其传递给 django 模板,并在 POST 表单中的 for 循环中调用它,如下所示:

<form action="/order_page/" method="POST">
    {% csrf_token %}
    <input type="number" name="student_id" >
            
    <br/><br/>
    <br/>
    <div class="row">
        {% for store in stores %}
            <input type="hidden" name="store_id" value="{{store.id}}">
            <input type="submit" value="{{store.store_name}}{{store.id}}" class="button store-button" type="button">
        {% endfor %}
    </div>
</form>

它工作正常,在单击它提交表单的按钮时显示带有每个商店名称和 id 的所有按钮,并将我带到下一个模板,在该模板中我捕获了 POST 商店 ID 和学生 ID,并将它们传递给下一页模板。但问题是显示的商店总是最后添加的商店,无论我在 POST 表单的第一页按哪个按钮,但按钮完美地显示了不同的商店及其 id,我不明白这是为什么甚至没有显示错误。

【问题讨论】:

  • 在 Django 中执行此操作的常用方法是为详细的乐谱页面使用单独的 URL,然后将每个按钮链接到它。你能从视图和网址分享你的代码吗?
  • @Jain 通常的方法是使用 ajax
  • def home(request): stores = Store.objects.all() return render (request, 'tray/home.html', {'stores':stores}) def order_page(request):如果 request.method == 'POST': student_id = request.POST['student_id'] store_id = request.POST['store_id'] student = Student.objects.get(id = student_id) store = Store.objects.get( id = store_id) 返回渲染(请求,'tray/order_

标签: python django django-models django-templates


【解决方案1】:

删除隐藏的输入 并将提交输入更改为按钮:

<button type="submit" name="store_id" value="{{store.id}}" class="button store-button">{{store.store_name}}{{store.id}}</button>

【讨论】:

    【解决方案2】:

    我找到了一种解决方法,通过从商店中选择 store_name 属性而不是它的 id 并且它可以工作,但不确定为什么 id 不能以同样的方式工作

    【讨论】:

      猜你喜欢
      • 2020-01-09
      • 1970-01-01
      • 2010-11-30
      • 1970-01-01
      • 2014-05-02
      • 1970-01-01
      • 2018-10-06
      • 1970-01-01
      • 2021-09-16
      相关资源
      最近更新 更多