Обновить значение тега шаблона из представлений в django - PullRequest
0 голосов
/ 24 октября 2019

У меня есть форма в Django для предоставления информации о различных задачах в определенный день, и эти задачи сохраняются как объекты модели. Я отображаю задачи на HTML-странице, как показано ниже в виде сетки. (Нажмите здесь, чтобы просмотреть сетку) Но теперь я хочу, чтобы можно было показывать задачи только в тот день. Используя стрелки в верхнем правом углу, я хочу иметь возможность фильтровать задачи и отображать их.

Я уже извлек текущую дату из JavaScript календаря и отправил ее через вызов ajax в моих представлениях.py. Оттуда я фильтрую задачи в соответствии с датой, но когда я меняю представление (т.е. дату из стрелок в левом и правом углу), я могу зафиксировать обновленную дату, но не могу обновить теги шаблона наСторона JS.

views.py

# The default view when the page loads for the first time
# As it loads by default to the current date, so filtering tasks on the current date.
def schedule(request):

    today = datetime.datetime.today()
    tasks = Tasks.objects.filter(schedule_date=today.strftime("%Y-%m-%d"))

    context = {
        "tasks": processes,
    }

    return render(request, r'dhtmlx_grid_view.html',context)
.
.
.
.
#Calling this function when there is a view change (ie., when you navigate to a new date)
@csrf_exempt
def load_tasks(request):
    if request.method == "POST":
        view_date = request.POST.get('new_date')
        date = datetime.datetime.strptime(view_date, '%b %d %Y')

        tasks= Tasks.objects.filter(schedule_date= date.strftime("%Y-%m-%d"))

        context = {
            'tasks': task
        }
        return render(request, r'dhtmlx_grid_view.html',context)

dhtmlx_grid_view.html (в разделе JS HTML-файла)

{# Using ajax post call to send the changed date #}
scheduler.attachEvent("onViewChange", function (new_mode, new_date) {

            $.ajax({
                url: {% url 'tasks:load-tasks' %},
                type: "POST",
                data: {
                    'new_date': String(new_date).substring(4,15),
                    'new_mode': new_mode,

                },
                success: function (result) {
                    alert("Successful")
                }
            });
        })
.
.
.
.

{# Using the template tags as follows to render the variable #}
        var tasks = [

            {% for i in tasks %}
                {
                    key: "{{ i.grouper }}", label: "{{ i.grouper }}", open: true, children: [
                            {% for j in i.list %}
                                {key: {{ j.sub_process_id }}, label: "{{ j.sub_process }}"},
                                {% endfor %}
                    ]
                },
            {% endfor %}
        ];

Как изменить значениеtasks на стороне шаблона из метода load-tasks?

Есть ли способ сделать это, так как, хотя я сохраняю измененную дату и фильтр, я не могу обновить значения <QuerySet> ie., tasks на стороне шаблона.

Дайте мне знать, если вам нужна дополнительная информация

1 Ответ

0 голосов
/ 24 октября 2019

Теги, загруженные в шаблон, оцениваются только при первоначальном создании файла HTML. Эти теги не будут работать снова для будущих запросов AJAX. Вам нужно изменить DOM в обратном вызове от вызова ajax.

scheduler.attachEvent("onViewChange", function (new_mode, new_date) {

            $.ajax({
                url: {% url 'tasks:load-tasks' %},
                type: "POST",
                data: {
                    'new_date': String(new_date).substring(4,15),
                    'new_mode': new_mode,

                },
                success: function (result) {
                    // Set the new DOM up in here
                }
            });
        })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...