Jinja2 - Verständnisfrage
Verfasst: Mittwoch 26. April 2017, 12:44
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:
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.
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:
Gibt es überhaupt die Option mehrerer ops in einem Compare?
Gruß Andre
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'))]))
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){
//????????????
};
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.class jinja2.nodes.Compare(expr, ops)¶
Compares an expression with some other expressions. ops must be a list of Operands.
Node type: Expr
Gibt es überhaupt die Option mehrerer ops in einem Compare?
Gruß Andre