Django: атрибут объекта, показывающий разные значения - PullRequest
0 голосов
/ 28 сентября 2018

Так что это выглядит как большой код, но я действительно беспокоюсь только о двух строках, где я ставлю стрелки.

Этот фрагмент кода взят из файла шаблона (html).

solutions_newest - массив, полный объектов "решения".«Решение» имеет атрибут «id».{{solution.id}} обращается к идентификатору решения.

Две строки, в которые я помещаю стрелки, находятся в одном и том же цикле for, поэтому он должен получить доступ к одному и тому же решению в определенный момент времени.Однако, когда я отображаю {{solution.id}} в обеих этих строках, в первой строке отображается идентификатор выбранной головоломки, а во второй строке всегда отображается идентификатор первой головоломки массива «solutions».

Как это может быть?

Я подозреваю, что я не до конца понимаю, как работают модалы Bootstrap, но, если честно, я понятия не имею, почему {{solution.id}} показывает разные идентификаторы в двухлинии со стрелками.

            {% for solution in solutions_newest %}
        <div class="card bg-light">
            <div class="card-header subtitle">
                <div class="triple-left">{{ solution.datetime }} by
                    <a href="{% url 'profile' username=solution.user.username %}">{{ solution.user.username }}</a>
                </div>
                {% if user == solution.user or user.profile.teacher %}
                <div class="triple-right">
                    <a href="{% url 'edit_solution' puzzleID=solution.puzzle.id solutionID=solution.id %}">edit</a>
                    &nbsp;&nbsp;
    --------------> <a class="text-danger" href="#" data-toggle="modal" data-target="#deleteSolutionNewest">{{ solution.id }}: delete</a>

                    <!-- Modal -->
                    <div class="modal fade" id="deleteSolutionNewest" tabindex="-1" role="dialog" aria-labelledby="deleteSolutionNewestLabel" aria-hidden="true">
                        <div class="modal-dialog" role="document">
                            <div class="modal-content">
                                <div class="modal-header">
                                <h5 class="modal-title" id="deleteSolutionNewestLabel">Are you sure?</h5>
                                <button type="button" class="close" data-dismiss="modal" aria-label="Close">
                                    <span aria-hidden="true">&times;</span>
                                </button>
                                </div>
                                <div class="modal-body">
                                Once you delete a solution, you lose it forever.
                                </div>
                                <div class="modal-footer">
                                <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
                --------------> <a href="{% url 'delete_solution' puzzleID=solution.puzzle.id solutionID=solution.id %}" class="btn btn-danger">{{ solution.id }}: Delete</a>
                                </div>
                            </div>
                        </div>
                    </div>

                </div>
                {% endif %}
                <div class="triple-center points">
                    <a class="block-link" href="{% url 'solution' puzzleID=solution.puzzle.id solutionID=solution.id %}">&uArr;</a>
                    &nbsp;&nbsp; {{ solution.points }} &nbsp;&nbsp;
                    <a class="block-link" href="{% url 'solution' puzzleID=solution.puzzle.id solutionID=solution.id %}">&dArr;</a>
                </div>
            </div>
            <a class="block-link" href="{% url 'solution' puzzleID=solution.puzzle.id solutionID=solution.id %}">
                <div class="card-body">
                    <h5 class="card-title">{{ solution.title }}</h5>
                    <p class="card-text">{{ solution.content | markdown | safe }}</p>
                </div>
            </a>
        </div>
        <br>
        {% endfor %}

Любая помощь приветствуется.Спасибо!

1 Ответ

0 голосов
/ 28 сентября 2018

В идентификаторах элементов HTML СЛЕДУЕТ быть уникальными во всем документе.Я подозреваю, что проблема вызвана наличием нескольких объектов с одинаковым идентификатором, поскольку наличие тега с id="deleteSolutionNewestLabel" в цикле for приведет к нескольким тегам с идентификатором deleteSolutionNewestLabel.

Спецификация html 5.1 говорит, что getElementById должен возвращать первый элемент с заданным идентификатором, поэтому поведение, которое вы видите, не является неожиданным.Большинство (если не все) браузеры при вызове getElementById выбирают и по-прежнему выбирают первый элемент с заданным идентификатором.Большинство библиотек, которые находят элементы по идентификатору, наследуют это поведение.Установите флажок " Могут ли несколько разных элементов HTML иметь одинаковый идентификатор, если они разные? "

Попробуйте заменить все экземпляры id="deleteSolutionNewestLabel" на id="deleteSolutionNewestLabel-{{ forloop.counter }}" и дайте мне знать, если этоустраняет проблему.

...