Static & Media Files¶
Django-style static and media file handling.
Configuration¶
In settings.py:
class AppSettings(Settings):
static_url = "/static/"
static_root = "staticfiles"
staticfiles_dirs = ["frontend/dist", "assets"]
media_url = "/media/"
media_root = "media"
Collecting Static Files¶
# Collect all static files
p8s collectstatic
# Clear and recollect
p8s collectstatic --clear
# Dry run (show what would be collected)
p8s collectstatic --dry-run
Mounting in App¶
from p8s.staticfiles import StaticFilesConfig, mount_static_files
config = StaticFilesConfig(
static_url="/static/",
static_root="staticfiles",
media_url="/media/",
media_root="media",
)
mount_static_files(app, config)
URL Generation¶
from p8s.staticfiles import get_static_url, get_media_url
# Get static file URL
css_url = get_static_url("css/main.css")
# -> "/static/css/main.css"
# Get media file URL
image_url = get_media_url("uploads/photo.jpg")
# -> "/media/uploads/photo.jpg"
File Uploads¶
from p8s.storage import FileField, ImageField
class Document(Model, table=True):
file: str | None = FileField(upload_to="docs/")
image: str | None = ImageField(upload_to="images/")
Files are stored in media_root and served from media_url.