Ich versuche, es möglich zu machen, mit Django Ausrüstung für einen bestimmten Kreis aus dem Internet zu reservieren Um zu verhindern, dass Sie frühere Reservierungsdaten bearbeiten oder löschen Ich möchte die Schaltflächen zum Bearbeiten und Löschen von Terminen vor der aktuellen Zeit ausblenden.
Es fiel mir schwer, den bedingten Zweig dafür in Vorlagen zu beschreiben.
views.py
context = {
'band_name' : band_name,
'schedules' : Schedule.objects.all(),
'target_date' : datetime.datetime.now()
}
return render(request, 'xxx.html', context)
xxx.html
{% schedule in schedules %}
{% if schedule.target_date > target_date %}
Tastenanzeige
{% endif %}
{% endfor %}
Übergeben Sie die Variable (heutiges Datum) und das Modell an Vorlagen Ich möchte die Anzeige / Nichtanzeige von Schaltflächen durch bedingte Verzweigung nach Datum in der Zeitplanschleife steuern.
Die bedingte Verzweigung kann jedoch nicht gut durchgeführt werden.
Einfach
{% if True %}
Dann wurde die bedingte Verzweigung gut gemacht, also beurteilen Sie im Voraus mit Blick und verwenden Sie die Modell-ID und das Beurteilungsergebnis (Bool) als Wörterbuch.
Ich gab es an Vorlagen weiter und versuchte es zu kontrollieren
views.py
my_dic = {}
target_date = datetime.datetime.now()
for schedule in schedules:
if target_date < schedule.target_date:
my_dic[schedule.id] = True
else:
my_dic[schedule.id] = False
context = {
'schedules' : Schedule.objects.all(),
'my_dic' : my_dic,
}
return render(request, 'xxx.html', context)
xxx.html
{% schedule in schedules %}
{% if my_dic[schedule.target_date] %}
Tastenanzeige
{% endif %}
{% endfor %}
Das funktioniert aber auch nicht.
Erweitern des Wörterbuchs in Vorlagen
my_dic.id
Sie können erweitern, indem Sie den Schlüssel für die ID in angeben, aber ich möchte sched.id in der Schleife der Zeitpläne an diesen ".id" -Teil übergeben.
Das funktioniert auch nicht.
Das Zuweisen einer Variablen mit dem with-Tag funktioniert nicht.
{% with target_id = schedule.id %}
{% if my_dic[schedule.target_id] %}
Das funktioniert auch nicht.
{% if my_dic.schedule.id %}
{% if my_dic[schedule.id] %}
Das war natürlich nicht gut.
Ich habe eine Methode direkt am Modell erstellt.
models.py
class Schedule(models.Model):
#Spaltendefinition ...
target_date = models.DateField(default=timezone.now, verbose_name=‘Reservierungsdatum’)
def is_available(self):
current_day = timezone.datetime.today()
return current_day < self.active_date
xxx.html
{% schedule in schedules %}
{% if schedule.is_available %}
Tastenanzeige
{% endif %}
{% endfor %}
Done.
Wenn Sie diese Methode verwenden, können Sie sogar den direkten Zugriff per URL umleiten.
Funktioniert die Codierung, die ich über das geschrieben habe, was ich tun möchte, nicht? Natürlich ist es besser, nicht so viel Logik wie möglich in Vorlagen zu schreiben. Ich wollte, dass kleine Operationen wie das Verweisen auf ein Wörterbuch gut funktionieren.
Ich habe andere Lösungen gefunden, z. B. das Erstellen von Vorlagenfiltern selbst. Ich denke, diese Methode ist vorerst die schönste.
das ist alles.
P.S. Herr Chanyu (@ chanyou0311) hat mich unterrichtet. Vielen Dank.
Recommended Posts