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)
|
||||||
|
13
src/main.cpp
13
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