[PYTHON] Ich hatte Probleme mit der bedingten Verzweigung in Djangos Vorlagen.

Was du machen willst

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.

Lösung

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

Ich hatte Probleme mit der bedingten Verzweigung in Djangos Vorlagen.
Ich habe versucht, Keras in TFv1.1 zu integrieren
Ich möchte mit Djangos Migrate von vorne beginnen
Was soll ich mit DICOM von MPEG2 machen?
Ich möchte mit einem Knopf am Kolben übergehen
Ich war in Schwierigkeiten, weil ich nicht mit Heroku pushen konnte
Ich war süchtig danach, 2020 mit Selen (+ Python) zu kratzen
Ich möchte mit einem Roboter in Python arbeiten.
Speichereingabe- / Ausgabememo von Python in Azure-Funktionen
Iframe in Seite mit Selenium kann nicht bearbeitet werden
Sortieren Sie die Postdaten in umgekehrter Reihenfolge mit Djangos ListView
Beachten Sie, dass ich mich mit HTML in Beautiful Soup befasst habe
Arbeitsnotiz, die ich i18n mit Flask App ausprobiert habe
Schreiben Sie eindeutig Code, der die bedingte Verzweigung erhöht