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 только из кода на стороне сервера, после того как он был отрисован и отображен пользователю. Если я правильно вас понял, предполагаемое взаимодействие пользователя с этим представлением/меню выглядит примерно так:
- Действие пользователя: Пользователь открывает меню.
- Действие программы: Среди прочего, отображается ввод даты.
- Действие пользователя: Пользователь вводит дату, используя ввод даты.
- Действие программы: Отображаемое содержимое изменяется.
Учитывая, что вы не можете влиять на отображаемый HTML только с помощью кода на стороне сервера в шаге 4, у вас есть две возможности для достижения этого:
- отобразить новый отрендеренный HTML
- использовать код на стороне клиента (например, 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-страницей, которую браузер затем отображает пользователю.