update custom many title

master
a2nr 2026-01-13 07:42:55 +07:00
parent 3ef0f533b3
commit 9156bdc436
5 changed files with 48 additions and 14 deletions

39
app.py
View File

@ -13,6 +13,7 @@ from flask_talisman import Talisman
import glob
import csv
import uuid
import os
from datetime import datetime
import logging
@ -27,6 +28,16 @@ STATIC_DIR = os.environ.get('STATIC_DIR', 'static')
TEMPLATES_DIR = os.environ.get('TEMPLATES_DIR', 'templates')
TOKENS_FILE = os.environ.get('TOKENS_FILE', 'tokens.csv')
# Get application titles from environment variables
APP_BAR_TITLE = os.environ.get('APP_BAR_TITLE', 'C Programming Learning System')
COPYRIGHT_TEXT = os.environ.get('COPYRIGHT_TEXT', 'C Programming Learning System © 2025')
PAGE_TITLE_SUFFIX = os.environ.get('PAGE_TITLE_SUFFIX', 'C Programming Learning System')
# Log the values to ensure they are loaded correctly
print(f"APP_BAR_TITLE: {APP_BAR_TITLE}")
print(f"COPYRIGHT_TEXT: {COPYRIGHT_TEXT}")
print(f"PAGE_TITLE_SUFFIX: {PAGE_TITLE_SUFFIX}")
# Security configuration using Talisman
Talisman(app,
force_https=False, # Set to True if using SSL
@ -449,6 +460,11 @@ def render_markdown_content(file_path):
@app.route('/')
def index():
"""Main page showing all lessons"""
print("Index function called") # Logging for debugging
print(f"APP_BAR_TITLE value: {APP_BAR_TITLE}") # Logging for debugging
print(f"COPYRIGHT_TEXT value: {COPYRIGHT_TEXT}") # Logging for debugging
print(f"PAGE_TITLE_SUFFIX value: {PAGE_TITLE_SUFFIX}") # Logging for debugging
# Get token from session or request (for now, we'll pass it in the template context)
token = request.args.get('token', '') # This would typically come from session after login
@ -480,7 +496,23 @@ def index():
for lesson in lessons:
print(f"Lesson: {lesson['title']}, completed: {lesson.get('completed', 'N/A')}") # Logging for debugging
return render_template('index.html', lessons=lessons, home_content=home_content, token=token, progress=progress)
try:
result = render_template('index.html',
lessons=lessons,
home_content=home_content,
token=token,
progress=progress,
app_bar_title=APP_BAR_TITLE,
copyright_text=COPYRIGHT_TEXT,
page_title_suffix=PAGE_TITLE_SUFFIX)
print("Template rendered successfully")
return result
except Exception as e:
print(f"Error rendering template: {str(e)}")
import traceback
traceback.print_exc()
# Return a simple error page
return f"Error rendering template: {str(e)}"
@app.route('/lesson/<filename>')
def lesson(filename):
@ -552,7 +584,10 @@ int main() {
lesson_completed=lesson_completed,
prev_lesson=prev_lesson,
next_lesson=next_lesson,
ordered_lessons=ordered_lessons)
ordered_lessons=ordered_lessons,
app_bar_title=APP_BAR_TITLE,
copyright_text=COPYRIGHT_TEXT,
page_title_suffix=PAGE_TITLE_SUFFIX)
@app.route('/compile', methods=['POST'])
def compile_code():

View File

@ -14,10 +14,10 @@ services:
- ../.env
# production
command: gunicorn --config gunicorn.conf.py app:app
# command: gunicorn --config gunicorn.conf.py app:app
# debug
# command: python app.py
command: python app.py
elemes-ts:
image: docker.io/tailscale/tailscale:latest

View File

@ -2,3 +2,4 @@ Flask==2.3.3
markdown==3.5
gunicorn==21.2.0
flask-talisman==1.1.0
python-dotenv==1.0.0

View File

@ -3,7 +3,7 @@
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>C Programming Learning System</title>
<title>{{ page_title_suffix }}</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
<link rel="stylesheet" href="{{ url_for('send_static', path='style.css') }}">
@ -12,7 +12,7 @@
<nav class="navbar navbar-expand-lg navbar-dark bg-primary">
<div class="container">
<a class="navbar-brand" href="/">
<i class="fas fa-code"></i> C Programming Learning System
<i class="fas fa-code"></i> {{ app_bar_title }}
</a>
<div class="d-flex">
<form class="d-flex" id="token-form" style="display: flex; align-items: center;">
@ -28,8 +28,6 @@
<div class="container mt-4">
<div class="row">
<div class="col-md-12">
<h1 class="mb-4">C Programming Learning System</h1>
<!-- Home content rendered from markdown -->
<div class="home-content mb-5">
{{ home_content | safe }}
@ -76,7 +74,7 @@
<footer class="footer mt-5 py-4 bg-light">
<div class="container text-center">
<span class="text-muted">C Programming Learning System &copy; 2025</span>
<span class="text-muted">{{ copyright_text }}</span>
</div>
</footer>

View File

@ -3,7 +3,7 @@
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>{{ lesson_title }} - C Programming Learning System</title>
<title>{{ lesson_title }} - {{ page_title_suffix }}</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.7.0/styles/default.min.css">
@ -21,7 +21,7 @@
<nav class="navbar navbar-expand-lg navbar-dark bg-primary">
<div class="container">
<a class="navbar-brand" href="/">
<i class="fas fa-code"></i> C Programming Learning System
<i class="fas fa-code"></i> {{ app_bar_title }}
</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav">
<span class="navbar-toggler-icon"></span>
@ -207,7 +207,7 @@
<footer class="footer mt-5 py-4 bg-light">
<div class="container text-center">
<span class="text-muted">C Programming Learning System &copy; 2025</span>
<span class="text-muted">{{ copyright_text }}</span>
</div>
</footer>