Jinja2 - Verständnisfrage

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
schrodi
User
Beiträge: 16
Registriert: Dienstag 10. Mai 2016, 12:59

Hallo zusammen,

ich bin gerade dabei ein in jinja2 geschriebenes Template so auseinander zu nehmen, um ein Formular auf Basis des Templates dynamisch zu erzeugen.

Ich weiß, dass dies bereits mittels dem Modul jinja2toschema umgesetzt wurde, das ist mir allerdings nicht dynamisch genug und bietet nicht die Möglichkeit auf den Context des Templates zuzugreifen. Auf Basis von jinja2schema habe ich das ganze neu geschrieben. Das ganze funktioniert auch relativ gut.

Nun bin ich am Javascript Teil und versuche gerade die von jinja2 'ge-parste' if-Bedingung via JavaScript auszuwerten.

Folgendermaßen sieht eine jinja2 'ge-parste' If-Bedingung aus:

Code: Alles auswählen

Or(left=Compare(expr=Name(name='checkIfVar3', ctx='load'), ops=[Operand(op='eq', expr=Const(value=u'Val3'))]), right=Compare(expr=Name(name='checkIfVar3', ctx='load'), ops=[Operand(op='eq', expr=Const(value=u'Val2'))]))
Ich erstelle in Javascript die Funktionen Or, Compare, Name, etc. und führe das Konstrukt dann via eval() aus, um ein finales true oder false zu erhalten; so sieht zumindest der Plan aus. Funktioniert bisher auch.

z.B.

Code: Alles auswählen

	var And = function(left, right) {
		return (left && right);
	};
	var Or = function(left, right){
		return (left || right);
	};
	var Const = function(value){
		return value;
	}
	var Name = function(name, ctx){
		return $('[name="'+name+'"]').val();
	}
	var Compare = function(expr, ops){
	 //????????????
	};
Meine Frage bezieht sich nun auf die Operanden (ops=[]) in der Bedingung. Diese basieren immer auf einer Liste. Dies steht auch so in der jinja2 Doku, wird aber nicht näher erläutert:
class jinja2.nodes.Compare(expr, ops)¶
Compares an expression with some other expressions. ops must be a list of Operands.

Node type: Expr
Ich verstehe nicht warum dies eine Liste ist. Ganz gleich, wie ich die Bedingung auch anpasse, ich habe nie mehr als ein Objekt in der Liste.
Gibt es überhaupt die Option mehrerer ops in einem Compare?



Gruß Andre
Zuletzt geändert von Anonymous am Mittwoch 26. April 2017, 13:14, insgesamt 2-mal geändert.
Grund: Quelltext in Codebox-Tags gesetzt.
BlackJack

@schrodi: Ohne jetzt in die Jinja-Doku geschaut zu haben, aber in Python gibt es ja auch solche Vergleiche: ``a <= x < b``. Wie wird das den in den AST geparst?
schrodi
User
Beiträge: 16
Registriert: Dienstag 10. Mai 2016, 12:59

Peinlich, dass ich daran nicht gedacht habe :-).
Jetzt sind 2 Operanden enthalten und ich grübel schon seit Tagen ...

Besten Dank!
Antworten