web-dev-qa-db-fra.com

Cadre de modèle HTML C ++, bibliothèque de modèles, bibliothèque de générateurs HTML

Je recherche des bibliothèques de modèles/générateurs pour C++ qui sont similaires à par exemple. Ruby's Erb, Haml, PHP's Smarty, etc.

Ce serait génial si je portais certaines fonctionnalités de base comme les boucles, if/else, la conversion int en chaînes, etc.

Le passage de paramètres au moteur de rendu de modèle est également important si je pouvais les passer tous dans une carte de hachage au lieu d'appeler une fonction pour chacun des paramètres.

Avez-vous des recommandations?

Je peux également voir la possibilité d'incorporer des langues comme Lua, mais je n'ai pas trouvé de bibliothèque de modèles pour cela non plus.

63
Marcin Gil

Grantlee est un moteur de modèle de chaîne basé sur le système de modèle Django. Il est porté en C++/Qt.

7
Kristian

NLTemplate est une petite bibliothèque de modèles C++ avec une syntaxe similaire à Django.

  • Remplacement variable
  • Blocs répétables ou facultatifs
  • Le fichier comprend
  • Licence MIT
  • Pas de dépendances externes
  • Fichier source unique, facile à ajouter à n'importe quel projet

Avertissement: je suis l'auteur.

6
Tomas Andrle

Wt (prononcé 'witty') est une bibliothèque C++ et un serveur d'applications pour développer et déployer des applications Web. Ce n'est pas un "framework", qui impose un mode de programmation, mais une bibliothèque.

3
yesraaj

CTPP est une bibliothèque très rapide et puissante écrite en C++. Il a des liaisons pour Perl, PHP et Python.

3
villie2

facebook's format :

std::cout << format("The answers are {} and {}", 23, 42); 
// => "The answers are 23 and 42"

std::map<std::string, std::string> m { {"what", "answer"}, {"value", "42"} }; 
std::cout << vformat("The only {what} is {value}", m); 
// => "The only answer is 42"
2
kirill_igum

ClearSilver est disponible pour c. Ici est une liste de sites Web existants qui utilisent clearsilver. Mais je ne l'utilise pas moi-même.

2
wimh

D'une manière ou d'une autre, j'ai manqué NLTemplate lorsque je cherchais à l'origine et j'ai écrit mon propre moteur de modèle C++, avec apparemment un cas d'utilisation similaire à NLTemplate :-)

https://github.com/hughperkins/Jinja2CppLight

  • Syntaxe semblable à Jinja2
  • léger, pas de dépendances sur boost, qt, etc, ...
  • substitution de variable
  • pour les boucles
    • y compris les boucles imbriquées :-)
1
Hugh Perkins

J'ai essayé d'utiliser le moteur de modèle et les pages Dynamic C++ fournies par le framework ffead-cpp, un exemple d'implémentation est montré sur le wiki

1
Mark

Jinja2C++

Description:

  • Bibliothèque C++ 14/17
  • Prise en charge des compilateurs grand public (Visual C++, gcc, clang)
  • Interface facile à utiliser.
  • Conformité à la spécification Jinja2 http://jinja.pocoo.org/docs/2.10/
  • Prise en charge des chaînes de caractères étroits et larges pour les modèles et les paramètres.
  • Réflexion intégrée pour les types C++ et les bibliothèques json populaires (nlohmann, RapidJson).
  • Callables définis par l'utilisateur.
  • Expressions Jinja2 puissantes et complètes avec filtrage (via l'opérateur "|") et expressions "if".
  • Un grand ensemble de balises Jinja2 comprend des macros et des extensions de modèle.
  • Rapport d'erreurs riche.
1
Sergei Sadovnikov
1
OJW

J'ai développé quelque chose ici modelé d'après jade pour c ++. Il prend un langage d'entrée simple mais puissant et crée une seule fonction de modèle c ++ qui écrit du HTML dans un flux.

< html
  < h1 The title is ${{ params["title"] }}& >
    < ul >
    & for(int i = 0; i < boost::get<int>(params["items"]); ++i) {
      < li Item ${{ i }}$ >
    & }
>
  • Remplacement variable
  • Blocs de code définis par l'utilisateur
  • récolte la pleine puissance de c ++ (boucles, déclarations de variables, vous l'appelez)
  • Super facile à intégrer dans les builds source
  • Tout est possible au moment de la compilation
  • Pas de format intermédiaire (c ++ simple)
  • Facile à déboguer (car sortie c ++)
  • Pas de dépendances externes
  • Super minuscule moins de 600 lignes de c ++
  • Licence GPL
0
burner

Templtext est une petite bibliothèque de traitement de modèles de texte C++. Il prend en charge les variables de type bash (% VAR ou% {VAR}). Mais la principale caractéristique est la prise en charge de fonctions définies par l'utilisateur . La bibliothèque a été créée par moi.

  • Analyse de modèle
  • Remplacement variable
  • Fonctions définies par l'utilisateur dans le modèle
  • C++ 11
  • Licence GPL

besoin de la bibliothèque de regex BOOST, mais elle sera remplacée par std :: regex dans la prochaine version

Exemple 1:

using namespace templtext;

Templ * t = new Templ( "Dear %SALUTATION %NAME. I would like to invite you for %TEXT. Sincerely yours, %MYNAME." );

std::map<std::string, std::string> tokens01 =
{
        { "SALUTATION", "Mr." },
        { "NAME", "John Doe" },
        { "TEXT", "an interview" },
        { "MYNAME", "Ty Coon" }
};

std::map<std::string, std::string> tokens02 =
{
        { "SALUTATION", "Sweetheart" },
        { "NAME", "Mary" },
        { "TEXT", "a cup of coffee" },
        { "MYNAME", "Bob" }
};

std::cout << t->format( tokens01 ) << std::endl;
std::cout << t->format( tokens02 ) << std::endl;

Production:

Dear Mr. John Doe. I would like to invite you for an interview. Sincerely yours, Ty Coon.
Dear Sweetheart Mary. I would like to invite you for a cup of coffee. Sincerely yours, Bob.

Exemple 2:

using namespace templtext;

std::unique_ptr<Templ> tf1( new Templ( "You have got an $decode( 1 )." ) );
std::unique_ptr<Templ> tf2( new Templ( "You have got an $decode( 2 )." ) );
std::unique_ptr<Templ> tf3( new Templ( "English version - $decode_loc( 1, EN )." ) );
std::unique_ptr<Templ> tf4( new Templ( "German version  - $decode_loc( 1, DE )." ) );
std::unique_ptr<Templ> tf5( new Templ( "Flexible version - $decode_loc( 1, %LANG )." ) );

tf1->set_func_proc( func );
tf2->set_func_proc( func );
tf3->set_func_proc( func );
tf4->set_func_proc( func );
tf5->set_func_proc( func );

Templ::MapKeyValue map1 =
{
        { "LANG", "EN" }
};

Templ::MapKeyValue map2 =
{
        { "LANG", "DE" }
};

std::cout << tf1->format() << std::endl;
std::cout << tf2->format() << std::endl;
std::cout << tf3->format() << std::endl;
std::cout << tf4->format() << std::endl;
std::cout << tf5->format( map1 ) << std::endl;
std::cout << tf5->format( map2 ) << std::endl;

Production:

You have got an Apple.
You have got an orange.
English version - Apple.
German version  - Apfel.
Flexible version - Apple.
Flexible version - Apfel.
0
trodevel