这是我的html,我有两个按钮,一个用于接受,另一个用于拒绝请求。在我看来,我需要知道按下了哪个按钮以及申请人的电子邮件(tutor_application.tutor.chalkslateuser.email)。我尝试了许多解决方案,但无济于事。
{% for tutor_application in tutor_application_list %}
<div class="card" style="width: 15rem;">
<img src="{{ tutor_application.tutor.picture.url }}" class="card-img-top" >
<div class="card-body">
<h5 class="card-title">
{{ tutor_application.tutor.chalkslate_user.first_name }} {{ tutor_application.tutor.chalkslate_user.last_name }}
</h5>
<h6 class="card-subtitle mb-2 text-muted">{{ tutor_application.note }}</h6>
<h6 class="card-subtitle mb-2 text-muted">{{ tutor_application.posted }}</h6>
</div>
<a class="btn btn-outline-success" role="button" type="submit"> Accept </a>
<a class="btn btn-outline-danger" href="#" role="button"> Reject </a>
</div>
{% endfor %}
答案 0 :(得分:0)
请使用Django Forms框架!绝对可以。
但是,没有理由不为一个Django表单/页面设置两个提交按钮。它们具有名称和值。例如
<input type="submit name="update" value="Update"
class="btn btn-primary" id="submit-id-update" />
<input type="submit" name="done" value="Done"
class="btn btn-primary" id="submit-id-done" />
在您看来,您可以在request.POST
中查看被按下的位置。例如,
if request.POST.get('done', None):
# user pressed the Done button
答案 1 :(得分:0)
让我们分层,避免出现类似的混乱情况。有两层,客户端和服务器端
Django在服务器端工作,他使用所有其他东西从发送到页面的变量中获取数据,因此通常他会装入一个HTML页面,并将其返回给您的客户端(在这种情况下,您)
这是django(或任何其他服务器或框架)返回的页面,该页面在客户端浏览器中运行,而不是在服务器中运行,称为DOM,而django无法对其进行操作,因为它已经被渲染,您需要做使用 JavaScript ,以便您可以与页面中的元素进行交互,触发事件并查看客户端是否有任何数据更改,在客户端使用Javascript的一种简单方法是使用Jquery,因为它是一个库友好
这是您的代码,稍有变化,我在两个链接中都添加了名称和ID,它们的名称分别为btnAccept和btnReject,并添加了<input type="hidden" id="btnType" name="btnType">
{% for tutor_application in tutor_application_list %}
<div class="card" style="width: 15rem;">
<img src="{{ tutor_application.tutor.picture.url }}" class="card-img-top" >
<div class="card-body">
<h5 class="card-title">
{{ tutor_application.tutor.chalkslate_user.first_name }} {{ tutor_application.tutor.chalkslate_user.last_name }}
</h5>
<h6 class="card-subtitle mb-2 text-muted">{{ tutor_application.note }}</h6>
<h6 class="card-subtitle mb-2 text-muted">{{ tutor_application.posted }}</h6>
</div>
<input type="hidden" name="btnType">
<a id="btnAccept" name="btnAccept" class="btn btn-outline-success" role="button" type="submit"> Accept </a>
<a id=="btnReject" name="btnReject" class="btn btn-outline-danger" href="#" role="button"> Reject </a>
</div>
{% endfor %}
如果您想在客户端执行此操作,请在Jquery中使用一些代码在前面进行操作
window.addEventListener("DOMContentLoaded", function(){
$("#btnAccept").click(function(){
$("#btnType").val('accepted');
});
$("#btnReject").click(function(){
$("#btnType").val('rejected');
});
});
因此,在您的帖子数据中,只需检查btnType中的值并查看是否接受或拒绝
或者只是在您的输入中添加标签名称(就像我之前所做的那样),您就可以从请求数据中获取它...您应该将标签更改为,并在单击它时在后端将其获取
您表单中的所有数据都将位于request.POST
(如果您以POST的形式发送),因此您可以将其作为request.POST['email']
(,这很脏,因为如果您没有在POST中使用电子邮件会引发错误),或者是一种更好的方法,即request.POST.get('email', None)
,那就尝试获取名为email的属性,如果找不到,只会返回None(空),因此您可以对其进行验证与如果或类似的东西
关于对象tutor_application
,当您使用tutor_application.tutor.chalkslateuser.email呈现模板时,该模板将只是电子邮件作为字符串,因此在将其发送到前端时,不会保留对象的引用,因此,如果您想知道选择了什么家教,则可能必须在HTML中输入ID或电子邮件作为输入,以便将其发送回后端并弄清楚什么是家教
<input type="hidden" name="email" value="{{tutor_application.tutor.chalkslateuser.email}}">
在后端,您将其获得为
email = request.POST.get('email', None')
请紧记将<a>
标记更改为<input name="">
,以便您可以在后端将其作为 request.POST