Django манипулировать / изменять дату в шаблоне

Можно ли сделать ввод, который изменяет date.today для всего шаблона?

мой шаблон

{% for Ansicht in Ansicht.lehrertabelle_set.all  %} 
  <tbody>
    <tr>
    <th scope="row"></th>
    <td>{{Ansicht.Pflichtstunden_normal}}</td>
    <td>{{Ansicht.Status_normal}}</td>
    {% if Ansicht.Prognose_FK %} 
    <td>{{Ansicht.Prognose_FK.Status}}</td>
    <td>{{Ansicht.Prognose_FK.Stunden}}</td>
    {% else %}
    <td>{{Ansicht.Prognose_FK.Status_2}}</td>
    <td>{{Ansicht.Prognose_FK.Stunden_2}}</td>
    {% endif %}
{% endfor %}

фильтр будет показывать те

    <td>{{Ansicht.Prognose_FK.Status_2}}</td>
    <td>{{Ansicht.Prognose_FK.Stunden_2}}</td>

вместо первых, когда дата изменена, я пытался использовать javascript, но я думаю, что это не работает из-за объектов python

Невозможно повлиять на отрисованный HTML только из кода на стороне сервера, после того как он был отрисован и отображен пользователю. Если я правильно вас понял, предполагаемое взаимодействие пользователя с этим представлением/меню выглядит примерно так:

  1. Действие пользователя: Пользователь открывает меню.
  2. Действие программы: Среди прочего, отображается ввод даты.
  3. Действие пользователя: Пользователь вводит дату, используя ввод даты.
  4. Действие программы: Отображаемое содержимое изменяется.

Учитывая, что вы не можете влиять на отображаемый HTML только с помощью кода на стороне сервера в шаге 4, у вас есть две возможности для достижения этого:

  1. отобразить новый отрендеренный HTML
  2. использовать код на стороне клиента (например, JavaScript)

Я объясню здесь первую возможность:

Вероятно, проще всего использовать форму django для отображения ввода. forms.py:

from django import forms
from django.utils.timezone import localdate

class PrognoseFilterForm(forms.Form):
    """Form for filtering the Prognose table."""
    datum = forms.DateField()

somewhere in views.py:

def prognose_tabelle_view(request, *args, **kwargs):
    form = PrognoseFilterForm(request.GET, initial={'date': timezone.localdate()})
    datum = timezone.localdate()
    if form.is_bound() and form.is_valid():
        datum = form.cleaned_data['datum']        

    prognose_query = Ansicht.lehrertabelle_set.all()
    prognoseansichten_bis_einschliesslich_datum = prognose_query.filter(
        Prognose_FK__von_Datum__lte=datum
    )
    prognoseansichten_ab_datum = prognose_query.filter(
        Prognose_FK__von_Datum__gt=datum
    )
    
    return render(
        request,
        'your_app/prognose_tabelle.html',
        context={
            'filter_form': form,
            'prognosen_bis_datum': prognoseansichten_bis_einschliesslich_datum,
            'prognosen_ab_datum': prognoseansichten_ab_datum,
        }
    )

prognose_tabelle.html:

<form action="{% url '<name of the view according to urls.py>' %}" method="get">
  {{ filter_form.as_p }}
  <input type="submit">Filtern</input>
</form>
<table>
  <tbody>
    {% for Ansicht in prognosen_bis_datum %}
      <tr>
        <th scope="row"></th>
        <td>{{Ansicht.Pflichtstunden_normal}}</td>
        <td>{{Ansicht.Status_normal}}</td>
        <td>{{Ansicht.Prognose_FK.Status}}</td>
        <td>{{Ansicht.Prognose_FK.Stunden}}</td>
      </tr>
    {% endfor %}
    {% for Ansicht in prognosen_ab_datum %}
      <tr>
        <th scope="row"></th>
        <td>{{Ansicht.Pflichtstunden_normal}}</td>
        <td>{{Ansicht.Status_normal}}</td>
        <td>{{Ansicht.Prognose_FK.Status_2}}</td>
        <td>{{Ansicht.Prognose_FK.Stunden_2}}</td>
      </tr>
    {% endfor %}
  </tbody>
</table>

Когда пользователь нажимает на кнопку с надписью "Filtern", данные формы отправляются в представление через HTTP-Get-Request в его GET-параметрах. Сервер отвечает новой HTML-страницей, которую браузер затем отображает пользователю.

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