提问人:C Regnew 提问时间:8/3/2023 更新时间:8/3/2023 访问量:45
HTML Django 条件语句取决于单选按钮的选择
HTML Django conditional statement dependent on radio button choices
问:
我正在开发一个考勤系统,教师可以将学生标记为“在场”、“缺席”或“迟到”,但只有在学生被标记为“缺席”或“迟到”时,他们才能输入评论。我想在选择“呈现”时输入“注释”文本。我尝试了不同的 if 语句,但似乎都不起作用。下面是我的代码和页面的屏幕截图。disabled
<input type="text" name='{{student.ssystudentid}}_comment' id="comment" maxlength="100">
<form action="{% url 'attendance:submitAttendance' %}" method="post" name="fullForm">
{% csrf_token %}
<table>
<tr>
<th>Student Name</th>
<th>P/A/L</th>
<th>Comment</th>
</tr>
{% for student in list_of_students %}
<tr>
<td>{{student}}</td>
<td>
<div class="radio-button">
{% for attendanceType in list_of_attendanceTypes %}
{% if attendanceType.attendancetype == "Present" %}
<input type="radio" name='{{student.ssystudentid}}_attendancetype' id='{{student.ssystudentid}}{{attendanceType}}' value={{attendanceType.attendancetypeid}} checked="checked">
<label for='{{student.ssystudentid}}{{attendanceType}}'> {{attendanceType}}</label>
{% else %}
<input type="radio" name='{{student.ssystudentid}}_attendancetype' id='{{student.ssystudentid}}{{attendanceType}}' value={{attendanceType.attendancetypeid}}>
<label for='{{student.ssystudentid}}{{attendanceType}}'> {{attendanceType}}</label>
{% endif %}
{% endfor %}
</div>
</td>
<td>
<input type="text" name='{{student.ssystudentid}}_comment' id="comment" maxlength="100">
</td>
</tr>
{% endfor %}
</table>
<input type = "submit" value = "Save Attendance"/>
</form>[![enter image description here][1]][1]
请注意,我没有使用 Django 表单。
任何帮助将不胜感激。
答:
0赞
markwalker_
8/3/2023
#1
你不能使用 django 模板语言条件来检查用户的单选按钮选择。为了实现你想要的,你需要javascript,并默认隐藏评论字段,并显示在选择考勤字段时。
它可能看起来像这样;
$(document).ready(function () {
toggleFields(); // call this first so we start out with the correct visibility depending on the selected form values
// this will call our toggleFields function every time the selection value of the attendance type field changes
$(".attendancetype-class").change(function () {
toggleFields();
});
});
// this toggles the visibility of comment
function toggleFields() {
if ($(".attendancetype-class").checked)
$("#comment").show();
else
$("#comment").hide();
}
尽管请记住,您默认设置的是“演示”单选按钮,因此评论字段将始终可见,因为默认情况下选择了单选按钮。您还需要某种选择器,允许您获取 Javascript 中的任何单选按钮。所以也许是一堂课?
我还建议为此使用 django 表单。这带来了很多好处,但具体来说,这里将允许您运行验证,以确保在提供注释时完成考勤字段。
还值得注意的是,最好使模板尽可能简单,避免模板中的逻辑。当我看到带有 的循环时,我想到了这一点。尽管对出勤类型的检查似乎是默认检查(您可以通过使用 django 表单来避免所有这些)。如果你在视图中创建了这个可迭代对象,并且你知道第一项是“Present”,那么你可以像这样检查它;for
if/else
{% for attendanceType in list_of_attendanceTypes %}
<input type="radio" name='{{student.ssystudentid}}_attendancetype'
id='{{student.ssystudentid}}{{attendanceType}}'
value={{attendanceType.attendancetypeid}}
{% if forloop.first %}checked="checked"{% endif %}>
模板标签的文档在这里。for
评论
0赞
C Regnew
8/3/2023
谢谢。现在,我的公司决定不使用 Django 表单,但也许我们会重新考虑这个决定。实现您所指的 Javascript 解决方案的最佳方法是什么?
0赞
markwalker_
8/3/2023
我添加了一些简单的 javascript。但后来意识到您默认选中其中一个单选按钮,因此评论字段将始终可见。
0赞
C Regnew
8/3/2023
明白了。我是 Django 的新手,所以这个问题非常基本......我应该把代码放在哪里?在静态目录中,然后将其链接到模板?还是完全不同的东西?
0赞
markwalker_
8/3/2023
是的,这在一定程度上取决于您的配置方式,但通常您的静态目录中会有一个 JavaScript 文件,您可以使用模板标签将其加载到模板中。阅读本文可能会有所帮助;docs.djangoproject.com/en/4.2/howto/static-filesstatic
评论