Put personal pages into subdomains

This commit is contained in:
2026-01-17 18:55:25 +03:00
parent aedd47ba36
commit 4b2720f8b7
36 changed files with 106 additions and 35 deletions
+2 -2
View File
@@ -5,5 +5,5 @@ __pycache__/
*$py.class *$py.class
.python-version .python-version
static/style/*.css *.css
static/style/*.css.map *.css.map
+3 -3
View File
@@ -2,8 +2,8 @@ FROM node:18-alpine as sass
RUN NODE_OPTIONS=--dns-result-order=ipv4first npm install -g sass RUN NODE_OPTIONS=--dns-result-order=ipv4first npm install -g sass
WORKDIR /build WORKDIR /build
COPY ./static/style ./style COPY ./blueprints ./blueprints
RUN sass ./style:./style \ RUN sass ./blueprints:./blueprints \
--no-source-map \ --no-source-map \
--style=compressed --style=compressed
@@ -13,7 +13,7 @@ FROM python:3.11-slim
WORKDIR /app WORKDIR /app
COPY . . COPY . .
COPY --from=sass /build/style/ ./static/style/ COPY --from=sass /build/blueprints/ ./blueprints/
RUN pip install --no-cache-dir -r requirements.txt RUN pip install --no-cache-dir -r requirements.txt
+15 -21
View File
@@ -1,11 +1,15 @@
from os import system as console
from configparser import ConfigParser from configparser import ConfigParser
from htmlmin import minify
from blueprints.root import bp as root_bp
from blueprints.risdeveau import bp as rdv_bp
import blueprints.root.modules.style
import blueprints.risdeveau.modules.style
from flask import ( from flask import (
Flask, Flask,
g, g,
request, request,
render_template,
) )
@@ -29,7 +33,9 @@ def load_translations(lang):
def get_locale(): def get_locale():
return request.accept_languages.best_match(('en', 'ru', 'de', 'fr', 'ja'), 'en') return request.accept_languages.best_match(('en', 'ru', 'de', 'fr', 'ja'), 'en')
app = Flask(__name__) app = Flask(__name__, static_folder=None, subdomain_matching=True)
app.register_blueprint(root_bp)
app.register_blueprint(rdv_bp)
@app.before_request @app.before_request
@@ -59,21 +65,9 @@ def inject_translations():
if app.debug: if app.debug:
console("sass static/style/main.scss static/style/main.css") blueprints.root.modules.style.compile_styles()
console("sass static/style/risdeveau.scss static/style/risdeveau.css") blueprints.risdeveau.modules.style.compile_styles()
@app.route("/") app.config['SERVER_NAME'] = "localhost:5000"
def index(): else:
return minify(render_template('index.html'), remove_empty_space=True) app.config['SERVER_NAME'] = "lair.moe"
@app.route("/host")
def host():
return minify(render_template('host.html'), remove_empty_space=True)
@app.route("/us")
def us():
return minify(render_template('us.html'), remove_empty_space=True)
@app.route("/risdeveau")
def risdeveau():
return minify(render_template('personal/risdeveau.html'), remove_empty_space=True)
+31
View File
@@ -0,0 +1,31 @@
import os
from pathlib import Path
from htmlmin import minify
from flask import Blueprint, render_template, send_from_directory, send_file, abort
bp = Blueprint(
"risdeveau",
__name__,
subdomain="risdeveau",
template_folder="..",
static_folder=None
)
def render_tmpl(filename: str) -> str:
template_path = os.path.join("risdeveau/templates", filename)
return minify(
render_template(template_path),
remove_empty_space=True
)
@bp.route("/static/<path:filename>")
def static(filename: str):
static_folders = ("static", "../root/static")
for dir in static_folders:
if os.path.exists(path := os.path.join("blueprints/risdeveau", dir, filename)):
return send_file(path)
return abort(404)
@bp.route("/")
def index():
return render_tmpl('index.html')
+9
View File
@@ -0,0 +1,9 @@
from os import system as console
from os.path import join
def compile_styles():
dir = "blueprints/risdeveau/static/style"
files = ("risdeveau",)
for file in files:
console(f"sass {join(dir, file+'.scss')} {join(dir, file+'.css')}")

Before

Width:  |  Height:  |  Size: 3.3 KiB

After

Width:  |  Height:  |  Size: 3.3 KiB

Before

Width:  |  Height:  |  Size: 3.3 KiB

After

Width:  |  Height:  |  Size: 3.3 KiB

Before

Width:  |  Height:  |  Size: 4.0 KiB

After

Width:  |  Height:  |  Size: 4.0 KiB

@@ -15,7 +15,7 @@
</head> </head>
<body> <body>
<header> <header>
<a href="{{ url_for('index') }}">Lair</a> <a href="{{ url_for('root.index') }}">Lair</a>
</header> </header>
<main> <main>
@@ -70,17 +70,17 @@
<div class="blocks qr"> <div class="blocks qr">
<div class="block qr"> <div class="block qr">
<p>POL, BNB</p> <p>POL, BNB</p>
<img src="/static/img/risdeveau/wallets/evm.webp"> <img src="/static/img/wallets/evm.webp">
</div> </div>
<div class="block qr"> <div class="block qr">
<p>TON</p> <p>TON</p>
<img src="/static/img/risdeveau/wallets/ton.webp"> <img src="/static/img/wallets/ton.webp">
</div> </div>
<div class="block qr"> <div class="block qr">
<p>XMR</p> <p>XMR</p>
<img src="/static/img/risdeveau/wallets/xmr.webp"> <img src="/static/img/wallets/xmr.webp">
</div> </div>
</div> </div>
</main> </main>
+28
View File
@@ -0,0 +1,28 @@
from htmlmin import minify
from flask import Blueprint, render_template, request, jsonify
bp = Blueprint(
"root",
__name__,
template_folder="templates",
static_folder="static"
)
def render_tmpl(filename: str) -> str:
return minify(
render_template(filename),
remove_empty_space=True
)
@bp.route("/")
def index():
return render_tmpl('index.html')
@bp.route("/host")
def host():
return render_tmpl('host.html')
@bp.route("/us")
def us():
return render_tmpl('us.html')
+9
View File
@@ -0,0 +1,9 @@
from os import system as console
from os.path import join
def compile_styles():
dir = "blueprints/root/static/style"
files = ("main",)
for file in files:
console(f"sass {join(dir, file+'.scss')} {join(dir, file+'.css')}")

Before

Width:  |  Height:  |  Size: 3.5 KiB

After

Width:  |  Height:  |  Size: 3.5 KiB

Before

Width:  |  Height:  |  Size: 1.9 KiB

After

Width:  |  Height:  |  Size: 1.9 KiB

Before

Width:  |  Height:  |  Size: 9.2 KiB

After

Width:  |  Height:  |  Size: 9.2 KiB

Before

Width:  |  Height:  |  Size: 5.9 KiB

After

Width:  |  Height:  |  Size: 5.9 KiB

Before

Width:  |  Height:  |  Size: 76 KiB

After

Width:  |  Height:  |  Size: 76 KiB

Before

Width:  |  Height:  |  Size: 59 KiB

After

Width:  |  Height:  |  Size: 59 KiB

@@ -1,14 +1,14 @@
<header> <header>
{%- if request.path != url_for('index') %} {%- if request.path != url_for('.index') %}
<a href="{{ url_for('index') }}">Lair</a> <a href="{{ url_for('.index') }}">Lair</a>
{%- else %} {%- else %}
<div></div> <div></div>
{%- endif %} {%- endif %}
<div class="header-links"> <div class="header-links">
{%- for (l, t) in ( {%- for (l, t) in (
('us', _('about us')), ('.us', _('about us')),
('host', _('about host')) ('.host', _('about host'))
) %} ) %}
{%- if url_for(l) == request.path %} {%- if url_for(l) == request.path %}
<strong>{{ t }}</strong> <strong>{{ t }}</strong>
@@ -3,7 +3,7 @@
{% block title %}О нас{% endblock %} {% block title %}О нас{% endblock %}
{% block content %} {% block content %}
<a href="{{ url_for('risdeveau') }}" class="block green"> <a href="{{ url_for('risdeveau.index') }}" class="block green">
<div class="header"> <div class="header">
<img src="/static/icon/us/risdeveau.webp" class="icon"/> <img src="/static/icon/us/risdeveau.webp" class="icon"/>
Sweetbread Sweetbread