HTML Django 条件语句取决于单选按钮的选择

HTML Django conditional statement dependent on radio button choices

提问人:C Regnew 提问时间:8/3/2023 更新时间:8/3/2023 访问量:45

问:

我正在开发一个考勤系统,教师可以将学生标记为“在场”、“缺席”或“迟到”,但只有在学生被标记为“缺席”或“迟到”时,他们才能输入评论。我想在选择“呈现”时输入“注释”文本。我尝试了不同的 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 表单。

任何帮助将不胜感激。

html django if-语句

评论


答:

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”,那么你可以像这样检查它;forif/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