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
 | 
			
		||||
INCLUDE_DIR = inc
 | 
			
		||||
INCLUDE_DIRS = include thirdparty/inja/include thirdparty/nlohmann/include
 | 
			
		||||
SRC_DIR = src
 | 
			
		||||
BUILD_DIR = build
 | 
			
		||||
 | 
			
		||||
# Compiler and linker settings
 | 
			
		||||
CXX = g++
 | 
			
		||||
LIBS = 
 | 
			
		||||
CXXFLAGS = -std=c++17 -I $(INCLUDE_DIR)
 | 
			
		||||
CXXFLAGS = -std=c++17 $(foreach dir,$(INCLUDE_DIRS),-I$(dir))
 | 
			
		||||
 | 
			
		||||
# Source and object files
 | 
			
		||||
SRC = $(wildcard $(SRC_DIR)/*.cpp)
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										13
									
								
								src/main.cpp
									
									
									
									
									
								
							
							
						
						
									
										13
									
								
								src/main.cpp
									
									
									
									
									
								
							@@ -1,14 +1,17 @@
 | 
			
		||||
#define CROW_STATIC_DIRECTORY "../static"
 | 
			
		||||
#include "templating.hpp"
 | 
			
		||||
#include <crow.h>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Templating templating{"../templates"};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
int main() {
 | 
			
		||||
    crow::SimpleApp app;
 | 
			
		||||
 | 
			
		||||
    CROW_ROUTE(app, "/")([] {
 | 
			
		||||
        return "hello world";
 | 
			
		||||
    CROW_ROUTE(app, "/")([]() {
 | 
			
		||||
        return templating.render_template("index.html");
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    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 property="og:site_name" content="Alfieking.dev">
 | 
			
		||||
    <meta property="og:url" content="https://alfieking.dev/">
 | 
			
		||||
    <meta property="og:title" content="{{ self.title() }}">
 | 
			
		||||
    <meta property="og:description" content="{{ self.description() }}">
 | 
			
		||||
    <meta property="og:title" content="{% block og-title %}Home - Alfie's basement{% endblock %}">
 | 
			
		||||
    <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 %}">
 | 
			
		||||
    {% block head %}
 | 
			
		||||
    {% endblock %}
 | 
			
		||||
@@ -2,12 +2,15 @@
 | 
			
		||||
 | 
			
		||||
{% block title %}Home - Alfie's basement{% endblock %}
 | 
			
		||||
{% block description %}server backend survivor{% endblock %}
 | 
			
		||||
{% block og-title %}Home - Alfie's basement{% endblock %}
 | 
			
		||||
{% block og-description %}server backend survivor{% endblock %}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
{% block head %}
 | 
			
		||||
<link rel="stylesheet" href="/static/css/index.css">
 | 
			
		||||
{% endblock %}
 | 
			
		||||
 | 
			
		||||
{%block content %}
 | 
			
		||||
{% block content %}
 | 
			
		||||
<section>
 | 
			
		||||
    <h1>A lil bit abt me</h1>
 | 
			
		||||
    <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