templating
This commit is contained in:
		
							
								
								
									
										6
									
								
								.gitmodules
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								.gitmodules
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,6 @@
 | 
				
			|||||||
 | 
					[submodule "thirdparty/inja"]
 | 
				
			||||||
 | 
						path = thirdparty/inja
 | 
				
			||||||
 | 
						url = https://github.com/pantor/inja
 | 
				
			||||||
 | 
					[submodule "thirdparty/nlohmann"]
 | 
				
			||||||
 | 
						path = thirdparty/nlohmann
 | 
				
			||||||
 | 
						url = https://github.com/nlohmann/json
 | 
				
			||||||
							
								
								
									
										18
									
								
								include/templating.hpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								include/templating.hpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,18 @@
 | 
				
			|||||||
 | 
					#ifndef TEMPLATING_HPP
 | 
				
			||||||
 | 
					#define TEMPLATING_HPP
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <inja/inja.hpp>
 | 
				
			||||||
 | 
					#include <crow.h>
 | 
				
			||||||
 | 
					#include <string>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class Templating {
 | 
				
			||||||
 | 
					public:
 | 
				
			||||||
 | 
					    Templating(const std::string& template_dir) : inja_env{template_dir} {}
 | 
				
			||||||
 | 
					    crow::response render_template(const std::string& template_name, const inja::json& data);
 | 
				
			||||||
 | 
					    crow::response render_template(const std::string& template_name);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					private:
 | 
				
			||||||
 | 
					    inja::Environment inja_env;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
							
								
								
									
										4
									
								
								makefile
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								makefile
									
									
									
									
									
								
							@@ -1,12 +1,12 @@
 | 
				
			|||||||
# Directories
 | 
					# Directories
 | 
				
			||||||
INCLUDE_DIR = inc
 | 
					INCLUDE_DIRS = include thirdparty/inja/include thirdparty/nlohmann/include
 | 
				
			||||||
SRC_DIR = src
 | 
					SRC_DIR = src
 | 
				
			||||||
BUILD_DIR = build
 | 
					BUILD_DIR = build
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Compiler and linker settings
 | 
					# Compiler and linker settings
 | 
				
			||||||
CXX = g++
 | 
					CXX = g++
 | 
				
			||||||
LIBS = 
 | 
					LIBS = 
 | 
				
			||||||
CXXFLAGS = -std=c++17 -I $(INCLUDE_DIR)
 | 
					CXXFLAGS = -std=c++17 $(foreach dir,$(INCLUDE_DIRS),-I$(dir))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Source and object files
 | 
					# Source and object files
 | 
				
			||||||
SRC = $(wildcard $(SRC_DIR)/*.cpp)
 | 
					SRC = $(wildcard $(SRC_DIR)/*.cpp)
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										11
									
								
								src/main.cpp
									
									
									
									
									
								
							
							
						
						
									
										11
									
								
								src/main.cpp
									
									
									
									
									
								
							@@ -1,14 +1,17 @@
 | 
				
			|||||||
#define CROW_STATIC_DIRECTORY "../static"
 | 
					#define CROW_STATIC_DIRECTORY "../static"
 | 
				
			||||||
 | 
					#include "templating.hpp"
 | 
				
			||||||
#include <crow.h>
 | 
					#include <crow.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Templating templating{"../templates"};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int main() {
 | 
					int main() {
 | 
				
			||||||
    crow::SimpleApp app;
 | 
					    crow::SimpleApp app;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    CROW_ROUTE(app, "/")([] {
 | 
					    CROW_ROUTE(app, "/")([]() {
 | 
				
			||||||
        return "hello world";
 | 
					        return templating.render_template("index.html");
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    app.port(8080).multithreaded().run();
 | 
					    app.port(8080).multithreaded().run();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					 | 
				
			||||||
// note: replace mustache with jinja
 | 
					 | 
				
			||||||
							
								
								
									
										16
									
								
								src/templating.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								src/templating.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,16 @@
 | 
				
			|||||||
 | 
					#include "templating.hpp"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					crow::response Templating::render_template(const std::string& template_name, const inja::json& data) {
 | 
				
			||||||
 | 
					    try {
 | 
				
			||||||
 | 
					        inja::Template template_obj = inja_env.parse_template(template_name);
 | 
				
			||||||
 | 
					        std::string rendered = inja_env.render(template_obj, data);
 | 
				
			||||||
 | 
					        return crow::response(rendered);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    } catch (const inja::RenderError& e) {
 | 
				
			||||||
 | 
					        return crow::response(500, e.what());
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					crow::response Templating::render_template(const std::string& template_name) {
 | 
				
			||||||
 | 
					    return render_template(template_name, inja::json{});
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -13,8 +13,8 @@
 | 
				
			|||||||
    <meta name="theme-color" content="#63de90" data-react-helmet="true">
 | 
					    <meta name="theme-color" content="#63de90" data-react-helmet="true">
 | 
				
			||||||
    <meta property="og:site_name" content="Alfieking.dev">
 | 
					    <meta property="og:site_name" content="Alfieking.dev">
 | 
				
			||||||
    <meta property="og:url" content="https://alfieking.dev/">
 | 
					    <meta property="og:url" content="https://alfieking.dev/">
 | 
				
			||||||
    <meta property="og:title" content="{{ self.title() }}">
 | 
					    <meta property="og:title" content="{% block og-title %}Home - Alfie's basement{% endblock %}">
 | 
				
			||||||
    <meta property="og:description" content="{{ self.description() }}">
 | 
					    <meta property="og:description" content="{% block og-description %}server backend survivor{% endblock %}">
 | 
				
			||||||
    <meta property="og:image" content="{% block og_image %}/static/content/general_images/icon.webp{% endblock %}">
 | 
					    <meta property="og:image" content="{% block og_image %}/static/content/general_images/icon.webp{% endblock %}">
 | 
				
			||||||
    {% block head %}
 | 
					    {% block head %}
 | 
				
			||||||
    {% endblock %}
 | 
					    {% endblock %}
 | 
				
			||||||
@@ -2,12 +2,15 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
{% block title %}Home - Alfie's basement{% endblock %}
 | 
					{% block title %}Home - Alfie's basement{% endblock %}
 | 
				
			||||||
{% block description %}server backend survivor{% endblock %}
 | 
					{% block description %}server backend survivor{% endblock %}
 | 
				
			||||||
 | 
					{% block og-title %}Home - Alfie's basement{% endblock %}
 | 
				
			||||||
 | 
					{% block og-description %}server backend survivor{% endblock %}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
{% block head %}
 | 
					{% block head %}
 | 
				
			||||||
<link rel="stylesheet" href="/static/css/index.css">
 | 
					<link rel="stylesheet" href="/static/css/index.css">
 | 
				
			||||||
{% endblock %}
 | 
					{% endblock %}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
{%block content %}
 | 
					{% block content %}
 | 
				
			||||||
<section>
 | 
					<section>
 | 
				
			||||||
    <h1>A lil bit abt me</h1>
 | 
					    <h1>A lil bit abt me</h1>
 | 
				
			||||||
    <p>
 | 
					    <p>
 | 
				
			||||||
							
								
								
									
										1
									
								
								thirdparty/inja
									
									
									
									
										vendored
									
									
										Submodule
									
								
							
							
								
								
								
								
								
							
						
						
									
										1
									
								
								thirdparty/inja
									
									
									
									
										vendored
									
									
										Submodule
									
								
							 Submodule thirdparty/inja added at 593ff96024
									
								
							
							
								
								
									
										1
									
								
								thirdparty/nlohmann
									
									
									
									
										vendored
									
									
										Submodule
									
								
							
							
								
								
								
								
								
							
						
						
									
										1
									
								
								thirdparty/nlohmann
									
									
									
									
										vendored
									
									
										Submodule
									
								
							 Submodule thirdparty/nlohmann added at 000db7a6a2
									
								
							
		Reference in New Issue
	
	Block a user