Шаблонные переменные не обновляются после перенаправления в Django?

Я создаю простое приложение на django, где я хочу сделать некоторый парсинг, когда пользователь нажимает кнопку на фронтенде.

У меня есть переменная шаблона {{ parsing }}, которую я использую внутри index.html для отключения кнопки парсинга, когда пользователь нажимает на нее

<div class="btn-group mr-2" role="group" aria-label="Parsing group">
  <button class="btn btn-dark btn-lg" id="parseButton" {% if parsing %} disabled {% endif %}>
    <i class="fa fa-terminal gradient-text"></i>
      <span class="gradient-text">| Parse</span>
  </button>
</div>

Далее я делаю метод JQuery, который отправляет ajax запрос на мой бэкенд для инициализации переменных для парсинга, а метод из views.py возвращает перенаправление на ту же страницу (index.html).

    $('#parseButton').click(function () {
        $.ajax({
            type: 'POST',
            url: 'initialize_parsing/',
            headers: {"X-CSRFToken": $.cookie("csrftoken")},
            data: {}
        });

Тогда мой views.py:

def initialize_before_parsing(request):
    if request.method == 'POST':
        frontendTracker = FrontendTracker()
        frontendTracker.progress = 0
        frontendTracker.parsing = True

    return redirect("index")


class IndexView(TemplateView):
    template_name = 'index.html'

    def get_context_data(self, **kwargs):
        frontendTracker = FrontendTracker()
        context = super(IndexView, self).get_context_data(**kwargs)
        context["showAnnotation"] = frontendTracker.showAnnotationButton
        context["parsing"] = frontendTracker.parsing
        context["progress"] = frontendTracker.progress

        return context

и urls.py

urlpatterns = [
    path('', IndexView.as_view(), name="index"),
    path("initialize_parsing/", initialize_before_parsing, name="initialize_before_parsing"),
]

Наконец, меня беспокоит то, что когда я отправляю этот ajax запрос и все работает нормально, когда моя страница перенаправляется {{progres}} переменная шаблона не изменяется или любая другая, пока я не сделаю refresh. Делать refresh с js, когда ajax успешен, это не то, что я хочу делать, потому что у меня есть некоторые другие методы внутри js, которые я хочу выполнить после этого ajax запроса, и это сбросит мой js код. Как можно добиться изменения значения переменной парсинга без обновления?

У вас есть состояние в двух местах: в браузере и на сервере.

Когда вы загружаете страницу с сервера, она анализирует состояние на сервере и заполняет шаблон соответствующим образом. Когда вы делаете вызов AJAX, вы передаете состояние на сервер, но ничего не делаете с состоянием страницы в браузере. При последующей перезагрузке вы видите отраженное изменение в браузере, потому что вы снова передали это состояние через шаблон.

Я не слишком много знаю о FrontendTracker и вашей конкретной проблеме, поэтому не знаю лучшего решения. Одно из решений - добавить обработчик .done(function( data ) { /* your code */ }) к вызову $.ajax и затем манипулировать содержимым страницы, чтобы отразить, как вы хотите, чтобы страница изменилась. Однако, похоже, что у вас есть какое-то значение progress, поэтому вам, вероятно, придется делать последующие вызовы AJAX для получения обновлений от сервера для обновленных значений этого значения.

Вернуться на верх