import os
import http.server
import socketserver
from jinja2 import Environment, FileSystemLoader
PORT = 8000
STATIC_DIR = "static/"
class StaticFileHandler(http.server.SimpleHTTPRequestHandler):
def __init__(self, *args, **kwargs):
super().__init__(*args, directory=STATIC_DIR, **kwargs)
with socketserver.TCPServer(("", PORT), StaticFileHandler) as httpd:
print(f"Serving at http://localhost:{PORT}/")
httpd.serve_forever()
< /code>
Заголовок базового шаблона (пропуская остальную часть шаблона): < /p>
{% block title %}{% endblock title %}
Я попытался написать пути в статические файлы как "static/styles.css" , но там не повезло. Что мне не хватает? В Server.py, что я вводу для Static_dir Если я хочу, чтобы домашняя папка проекта была статической каталогом? Оставляя его пустым или добавить/ Показать каталог корневых компьютеров, а не проект. index.html сохраняет файл HTML в папку проекта (я перетаскиваю его в «статический» для тестирования): < /p>
# write-posts.py
from jinja2 import Environment, FileSystemLoader
from datetime import datetime, timezone
# date = datetime(tzinfo=timezone.utc).isoformat()
posts = [
{"title": "First Post", "slug": "first-post", "date": "2025, 7, 1", "body": "First post!", "tags": "First Post"},
]
environment = Environment(loader=FileSystemLoader("templates"))
template = environment.get_template("index.html")
filename = "index.html"
content = template.render(posts=posts)
with open(filename, mode="w", encoding="utf-8") as message:
message.write(content)
print(f"... wrote {filename}")
< /code>
Я попробовал предложения Фураса, но я все еще не получаю статические файлы для подключения: < /p>
server.py:образноimport os
import http.server
import socketserver
from jinja2 import Environment, FileSystemLoader
PORT = 8000
BASE_DIR = "source/" # Directory containing static files. "BASE_DIR="/full/path/to/www/" might be better if server runs from a different working directory.
class StaticFileHandler(http.server.SimpleHTTPRequestHandler):
def __init__(self, *args, **kwargs):
super().__init__(*args, directory=BASE_DIR, **kwargs)
with socketserver.TCPServer(("", PORT), StaticFileHandler) as httpd:
print(f"Serving at http://localhost:{PORT}/")
httpd.serve_forever()
< /code>
base.html шаблон (только тег головки): < /p>
{% block title %}{% endblock title %}
< /code>
write-posts.py (генерирование index.html, у меня также есть шаблон для моей домашней страницы под названием «index.html»): < /p>
from jinja2 import Environment, FileSystemLoader
from datetime import datetime, timezone
# date = datetime(tzinfo=timezone.utc).isoformat()
posts = [
{"title": "First Post", "slug": "first-post", "date": "2025, 7, 1", "body": "First post!", "tags": "First Post"},
]
environment = Environment(loader=FileSystemLoader("source/templates"))
template = environment.get_template("index.html")
filename = "index.html"
< /code>
В моих путях файлов CSS к статическим файлам записываются как: < /p>
src: url("static/fonts/font-example.woff2") format("woff2");
< /code>
Сообщения в терминале, когда я загружаю страницу в моем браузере: < /p>
127.0.0.1 - - [18/Jul/2025 10:22:56] "GET / HTTP/1.1" 200 -
127.0.0.1 - - [18/Jul/2025 10:23:05] "GET / HTTP/1.1" 200 -
127.0.0.1 - - [18/Jul/2025 10:23:05] code 404, message File not found
127.0.0.1 - - [18/Jul/2025 10:23:05] "GET /favicon.ico HTTP/1.1" 404 -
127.0.0.1 - - [18/Jul/2025 10:29:44] "GET / HTTP/1.1" 304 -
< /code>
В консоли моего браузера (Firefox) я вижу только сообщение 404 для файла Favicon. < /p>
структура моего проекта: < /p>
project folder
-- server.py (`http.server` module/script)
-- write-posts.py (test script for generating index.html from Jinja templates and static files)
-- venv folder (virtual environment folder)
-- source folder (for HTML, static, and template files, an "input" folder)
-- index.html (what write-posts.py generates, I manually move it from project to source and overwrite the previous version)
-- static folder
-- static files like styles.css, favicon.ico, logo.png, paper.webp (for wallpaper)
-- fonts folder
-- templates folder
-- base.html (base template)
-- homepage.html (child template of base, template for the homepage. previously called "index.html" but renamed to avoid confusion)
< /code>
server.py:
import os
import http.server
import socketserver
from jinja2 import Environment, FileSystemLoader
PORT = 8000
BASE_DIR = "source/"
class StaticFileHandler(http.server.SimpleHTTPRequestHandler):
def __init__(self, *args, **kwargs):
super().__init__(*args, directory=BASE_DIR, **kwargs)
with socketserver.TCPServer(("", PORT), StaticFileHandler) as httpd:
print(f"Serving at http://localhost:{PORT}/")
httpd.serve_forever()
< /code>
write-posts.py:
from jinja2 import Environment, FileSystemLoader
from datetime import datetime, timezone
# date = datetime(tzinfo=timezone.utc).isoformat()
posts = [
{"title": "First Post", "slug": "first-post", "date": "2025, 7, 1", "body": "First post!", "tags": "First Post"},
]
environment = Environment(loader=FileSystemLoader("source/templates"))
template = environment.get_template("homepage.html")
filename = "index.html"
content = template.render(posts=posts)
with open(filename, mode="w", encoding="utf-8") as message:
message.write(content)
print(f"... wrote {filename}")
< /code>
base.html:
{% block title %}{% endblock title %}

< /code>
in write-posts.py это сохраняет index.html в папке "Project". Поскольку Server.py смотрит на исходную папку для файлов, я вручную перетаскиваю index.html из Project в Source. Я пробовал эти пути файла в base.html и styles.css, пока нет работы: < /p>
project/source/static/
/project/source/static/
/source/static/
source/static/
/static/
static/
/
Подробнее здесь: https://stackoverflow.com/questions/797 ... e-template
Мобильная версия