2013-06-26 4 views
7

Próbuję napisać aplikację w javascript z biblioteką ember.js, która opiera się głównie na systemie szablonów Handlebars. Jednak używam FLASK, który również używa systemu szablonowego jinja.Czy możesz użyć dwóch szablonów HTML, takich jak Handlebars i Jinja

Czy można korzystać z obu renderów szablonów w tym samym czasie? Czy muszę używać jednego na drugim. Ktoś, kto ma doświadczenie w używaniu zarówno flask, jak i ember.js wie, który z nich mógłby być łatwiej zastąpiony innym? (Może kierownica jest znacznie łatwiejsza do zastąpienia Jinja lub odwrotnie).

Odpowiedz

7

Należy zauważyć, że te dwa silniki szablonów znajdują się w różnych miejscach. Jinja2 uruchomi się po stronie serwera, Handlebars uruchomi się po stronie klienta. Jeśli chcesz, możesz potencjalnie użyć obu bez zakłóceń.

Ale z tym powiedziane, naprawdę nie ma potrzeby korzystania z szablonów po stronie serwera, jeśli masz frameworka bogatych klientów, takich jak ember.js. W twojej sytuacji serwer Flask będzie prawdopodobnie miał trasy, które obsługują dane przez żądania ajaxowe z powrotem do klienta ember.js, więc klient jest naprawdę najlepszym miejscem do renderowania szablonu.

+0

Używam node.js dla serwera i używam mieszanki jade z szablonami kierownicy. Jade nadal daje mi, a co najważniejsze, mojemu projektantowi i innej, nietechnicznej osobie bardzo łatwy plik do edycji. (Nadal można edytować surowy HTML, ale jade jest po prostu naprawdę czysty) Kiedy muszę umieścić w akcji kierownicy i link do, po prostu używam surowego html w szablonie. Świetnie dla nas działa. – WallMobile

+8

Najlepsze aplikacje internetowe (najbardziej wydajne) renderują pełną stronę html przy pierwszym załadowaniu, a następnie używają renderowania po stronie klienta, aby go zaktualizować. Poleganie na kliencie, aby w pełni załadować początkową stronę, znacznie zwiększa ładowanie strony (należy wykonać kolejne wywołania ajax). –

+0

Należy zauważyć - Kierownicę można wyświetlać po obu stronach, ale Jinja jest rzadkością po stronie klienta. – cwallenpoole

2

Jak powiedział @Miguel, naprawdę nie potrzebujesz Jinja2, jeśli używasz ember.js, zorientowałem się, że nie chcesz renderować tych szablonów, po prostu zwróć plik flask.send_file ("tutaj plik html") zamiast tego zwraca flask.render_template ("tutaj twój plik html"). Aby uzyskać więcej informacji, patrz docs.

+2

jeszcze lepiej jest traktować pliki html jako pliki statyczne. Podczas opracowywania Flask może obsługiwać je bezpośrednio z folderu "statycznego". Podczas produkcji twój serwer powinien obsługiwać te pliki omijając Flask. Powinieneś używać tylko Flask dla żądań ajaxowych. Powodzenia w projekcie! – Miguel

1

Chociaż zasadniczo zgadzam się zarówno z @Miguelem i @Ali, kilka firm, z którymi współpracowałem, wymieszałem model RESTful dla interfejsów API z kodem generowanym przez serwer. [. UWAGA: Nie powinno to być przypadek, gdy za pomocą Ember, ale pracuję z kolbą/Jinja2 i szkieletowej w bazie kodu mojego obecnego klienta]

faktycznie znalazłem rozwiązanie używając Pybars, w oparciu o pewne czytanie ze Khan Academy's style guide:

@app.template_filter("handlebars") 
def handlebars_filter(context, filepath): 
    source = open(filepath, "r").read().decode('utf-8') 
    template = pybars.Compiler().compile(source) 

    return Markup(u"".join(template(context))) 
3

można oznaczyć jako sekcje kodu {% raw %} powiedzieć jinja2 go zignorować. Zawiń szablon handlebars.js w surowych tagach takich jak:

{% raw %} 
<script id="foo-template" type="text/x-handlebars-template"> 
    <p>{{foo}} - {{bar}}</p> 
</script> 
{% endraw %} 
Powiązane problemy