Python (без Django/Flask) - CSS и другие статические файлы не распознаются в базовом шаблонеHtml

Программисты Html
Ответить
Anonymous
 Python (без Django/Flask) - CSS и другие статические файлы не распознаются в базовом шаблоне

Сообщение Anonymous »

Приносим извинения за основной вопрос, но я не могу выяснить, почему лист CSS, вызванный в заголовке моего базового шаблона, не подключен, когда я проверяю свой файл index.html на http.server .
Я перемещаю свой сайт на Python и jinja, нет Framewrpt. На основе некоторых уроков, которые я нашел в Интернете: < /p>

Код: Выделить всё

# server.py
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» и так далее, но не повезло. Что мне не хватает? Я чувствую, что (и надеюсь), это просто какой -то глупый надзор, который прямо у моего носа, и я не вижу его, но ... ну, я нанес свой мозг на это и просто не вижу этого. Есть идеи? Я подумал, что оставить это пустым или просто добавить/, что это сделает, но они, кажется, показывают мне корневой каталог моего компьютера, а не проект, и, очевидно, я не хочу этого. Папка Project, или, может быть, папка сайта , так как я планирую создавать выводную папку для всех файлов 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>
Редактировать 2: Я попробовал предложения Фураса, но я все еще не получаю статические файлы для подключения. Вот мои обновленные файлы: 
[b] server.py[/b]
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()
base.html шаблон (только тег головки)

Код: Выделить всё




{% block title %}{% endblock title %}





write-posts.py (мой модуль/скрипт для создания домашней страницы index.html. Примечание У меня также есть шаблон для моей домашней страницы, который в настоящее время называется «index.html». Также. Да, я, вероятно, должен изменить это, но я работаю с ней сейчас.

Код: Выделить всё

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"
В моем файле css [/b] пути к статическим файлам записываются так:

Код: Выделить всё

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 -
Однако в консоли моего браузера (Firefox) я вижу только сообщение 404 для файла Favicon.
Любые идеи? Момент.

Код: Выделить всё

PROJECT folder (let's call this "Project" for short)
-- server.py (http.server module/script)
-- write-posts.py (A test script for generating an index.html file from my Jinja templates and static files)
-- VENV folder (virtual environment folder)
-- SOURCE folder (Folder for my HTML, static, and template files, it's an "input" folder.)
-- index.html (This is what `write-posts.py` generates, I manually move it from SOURCE to STATIC and overwrite the previous version.)
-- STATIC folder (folder for my static files like CSS, fonts, images, eventually video media)
-- Static files like `styles.css`, `favicon.ico`, `logo.png`, `paper.webp` (for wallpaper)
-- FONTS folder (for fonts, obviously)
-- TEMPLATES folder (self-explanatory, I hope)
-- base.html (base template)
-- homepage.html (child template of base, it's the template for the homepage.  I previously called this "index.html" but just renamed it to avoid further confusion.)
Вот мои сценарии Python:
sstrong> 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()
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}")
base.html

Код: Выделить всё




{% block title %}{% endblock title %}








[url={% url ]
[img]logo.png[/img]
[/url]
< /code>
Это должно быть весь соответствующий код для этого вопроса. Обратите внимание, что в write-posts.py 
он сохраняет index.html в папку проекта. Поскольку Server.py просматривает исходную папку для файлов, я вручную перетаскиваю index.html из проекта в источник. Да, я знаю, что должен изменить write-posts.py , чтобы сделать это, я просто ленился, извините. Xd
Я пробовал то, что, как мне кажется, представляет собой каждый мыслимый путь файла для записи в Base.html и styles.css , и все же ни один из них не работает. Эти типы путей включают в себя:

Код: Выделить всё

project/source/static/< /code>
/project/source/static/< /code>
/source/static/< /code>
source/static/< /code>
/static/< /code>
static/< /code>
/< /code>

Если другие люди могут подключать CSS с этими данными, а я нет, то в моем проекте должна быть проблема, о которой я не знаю. Единственная другая возможность, о которой я могу придумать, это то, что, возможно, я не представлял свою структуру проекта четко, поэтому я надеюсь, что это делает ее яснее. Пожалуйста, не делайте предположений, я учу себя на Python, поэтому, если у вас есть вопрос или вы хотите что-нибудь проверить, спросите.

Подробнее здесь: https://stackoverflow.com/questions/797 ... ized-in-ba
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Html»