2012-09-02 4 views
8

Ich möchte auf eine andere HTML-Dateien basierend auf einer Variablen zeigen. Ich verwende in folgendem Format enthalten:Mit Include dynamisch auf HTML zeigen

{% include 'templates/case/{{cid}}/intro.html' %} 

Dies wirft einen Fehler:

TemplateNotFound: templates/case/{{cid}}/intro.html 

bei dieser Suche Ich weiß Jinja2 nicht die Variable zur Laufzeit aufzulösen. Der Wert von cid = ABC (ABC ist ein Name des Ordners in dem Pfad), so erwartete ich die Gesamt Weg zu sein:

templates/case/ABC/intro.html 

Wenn ich diesen aufgelösten Pfad direkt verwenden in sind es funktioniert.

Wie kann ich das beheben?

Antwort

2

Sie könnten immer den vollständigen Pfad im Ansichtscode berechnen und diesen an die Vorlage übergeben. Entfernen Sie an dieser Stelle alle Anführungszeichen und geschweiften Klammern um die Variable herum.

Achten Sie dabei auf path traversal attacks.

+0

Thomas, danke für die Antwort. Wenn Sie meinen, dass ich den vollständigen Pfad in einer Variablen übergebe: vid = 'templates/case/{{cid}}/intro.html' und dann benutze es im inclide .... {% include '{{vid}}' %}. Ich habe das versucht ... das gibt den gleichen Fehler ... TemplateNotFound. – Utpal

+0

@Utpal Haben Sie versucht, "{{}}" zu entfernen und einfach {% include vid%} zu verwenden? Ich könnte allerdings auf der Stelle sein, habe Jinja schon lange nicht mehr benutzt, aber ich würde erwarten, dass es in dieser Hinsicht ähnlich wie Django funktioniert. Vielleicht möchten Sie diese ähnliche Frage auschecken: http://stackoverflow.com/questions/6101864/dynamic-use-of-templates-in-jinja2 –

+0

Vielen Dank Thomas. Das Entfernen von '{{}}' funktioniert einwandfrei. Allerdings würde ich die "Traversal-Tracker-Angriffe" überprüfen, vor denen Sie mich gewarnt haben. – Utpal

2

die Antwort in einem anderen Stack-Überlauf Frage here Gefunden:

{% set path = 'templates/case/' + cid + '/intro.html' %}{% include path %} 
6

Hier ist, wie Sie den Code umfassen direkt über

{% include "templates/case/"+cid+"/intro.html" %} 
+0

Das hat bei mir mit Nunjucks funktioniert – colmjude

9

Mindestens in Jinja2 dieser arbeitet 2.7.1 weitergeben müssen:

{% include 'templates/case/%s/intro.html' % cid %}