2016-11-05 4 views
2

Ich kann nicht herausfinden, wie mehrere Argumente in benutzerdefinierten Vorlagenfilter gesendet werden.Django - Zeichenfolge aus Variable in Template-Tag

Das Problem ist, dass ich Template-Variablen als Argumente verwenden.

CUSTOM TEMPLATE FILTER

@register.filter 
def is_scheduled(product_id,dayhour): 
    day,hour = dayhour.split(',') 
    return Product.objects.get(id=product_id).is_scheduled(day,hour) 

NORMAL USE

{% if product.id|is_scheduled:"7,22" %}...{% endif %} 

Die Linie oben würde ich legte zwei Argumente korrekt wie arbeiten - 7 und 22 in den Filter (getestet - Werke) . Das Problem ist, dass ich Variablen anstelle von Klartext/String als Argument setzen möchte.

In meiner Vorlage:

{% with day=forloop.counter|add:"-2" hour=forloop.parentloop.counter|add:"-2" %} 

Jetzt will ich {{ day }} und {{ hour }} als ein Argument verwenden.

Ich habe versucht, zum Beispiel:

{% if product.id|is_scheduled:"{{ day }},{{ hour }}" %}...{% endif %} 

Aber das wirft:

Ausnahmewert: ungültige wörtliche für int() mit Basis 10: '{{Tag}}'

Haben Sie Ideen?

Antwort

3

Sie brauchen nicht die {{}}, wenn Sie innerhalb der {% %} sind. Verwenden Sie einfach die Namen direkt in diesem Tag und verwenden Sie die String-Concat-Vorlagensyntax add.

Bei day und hour sind Strings, wird eine Typumwandlung auf Zeichenfolge vor concating die Saiten erforderlich:

{% with day|stringformat:"s" as sday hour|stringformat:"s" as shour %} 
    {% with sday|add:","|add:shour as arg %} 
     {% if product.id|is_scheduled:arg %}...{% endif %} 
    {% endwith %} 
{% endwith %} 
+0

Leider ist dies nicht funktioniert. Ich bin mir nicht sicher warum. Wahrscheinlich sind Tag und Stunde Ganzzahlen. Es gibt zurück: Exception Wert: \t 'int' Objekt hat kein Attribut 'Split' und wenn ich Taghour-Variable drucke es druckt 0 statt "0,2" zum Beispiel. –

+0

Ich aktualisierte die Antwort, um eine Typkonvertierung einzubeziehen –

+0

Scheint wie ein guter Ansatz, aber es gibt ein Problem, wahrscheinlich mit Syntax. Sie haben ein ungültiges Token erhalten: u'hour | stringformat: "s" 'Ich versuche herauszufinden, wo der Fehler liegt. –

Verwandte Themen