Wie kann ich das übergeben von Objekten zu einer benutzerdefinierten django template-tag? Ich habe einen Weg herausgefunden, aber es scheint hackish

OK. Ich Schreibe an einem system, wo die Benutzer "pick the winner". Ich habe eine "Kampf" - Tabelle und eine "Auswahl" - Tabelle. Auf das matchup Webseite, lade ich alle matchups für diesen Tag in den Kontext zusammen mit allen picks für diesen Tag.

Jetzt brauche ich zu display-Haken-Bilder neben den Entscheidungen, die es dem Benutzer ermöglicht, "pick", die Artikel (genau wie die "beste Antwort" check auf Stack Overflow), um zu sehen, welche überprüft werden müssen, um in den down - (abgeholt) Status (oder Zustand, oder "gewonnen-Staat" oder "lost state"), erstelle ich ein template-tag.

Ist hier ein relevanter Ausschnitt aus dem template

  3 {% load matchup_tags %}
  4 
  5 {% for matchup in matchups %}
  6     <div class="grid_6" style="margin-top:15px; border:1px solid black;">
  7 
  8             <div class="div-status"><span class="game-status">{{matchup.status}}</span></div>
  9             <div class="opt1">
 10                 <div class="pick-home {% get_check matchup picks %}">

Wie Sie sehen können, die get_check template-tag wird in einer Schleife ausgeführt. Ich pass das aktuelle matchup, zusammen mit der Liste der picks, die auf dieser template-tag.

Hier ist mein "gehackt" Versuch, das template-tag

  1 from django.template import Library, Node
  2 from matchup.models import *
  3 
  4 register = Library()
  5 
  6 class PickerNode(Node):
  7     def __init__( self , matchup , picks ):
  8         self.matchup , self.picks = matchup , picks
  9         
 10     def render(self, context):
 11         p = context['picks']
 12         return p[0].pick
 13     
 14 def get_check(parser, token):
 15     bits = token.contents.split()
 16     return PickerNode( bits[1] , bits[2] )
 17 
 18 get_check = register.tag(get_check)

Wenn Sie einen Blick auf Zeile 12 von meinem template tag, ich bin über eine Kontext-variable anstatt die bits[2] variable(picks, die übergeben wurde, aus meiner Sicht als "picks").

Bin ich in der Lage, um Objekte übergeben zu meinem template-tags? Und warum würde ich auch stören, wenn ich kann nur auf das Objekt im Kontext.

Edit: Früher, anstatt den Kontext, ich war etwas wie
"return self.picks.pick"
und es warf einige "unicode enthält keine Eigenschaft "pick "" Fehler

Prost!

  • Ja, Sie können Objekte übergeben oder Skalare Werte zu template-tags. Sie können auch beheben Variablen aus dem Kontext. Ich habe nicht genug technische Kenntnisse über Djangos Template-system, um Ihnen sagen, welche effizienter ist. Kann jemand darüber sprechen? Ich bin interessiert, lernen mehr über, wie gut.
InformationsquelleAutor Chris D. | 2011-06-19
Schreibe einen Kommentar