You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django中如何配置带可变路径的自定义静态/媒体URL?

Django游戏截图存储方案相关疑问

我开发了一个用于存储游戏及截图的Django应用,保存游戏时会自动下载并存储截图,当前的模型定义如下:

class ImageModel(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    img = models.ImageField()

class Game(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    screenshots = models.ManyToManyField(ImageModel)
    screenshots_urls = models.JSONField()

保存游戏时,我会创建/games/<game_uuid>/和/games/<game_uuid>/screenshots/目录,截图会被下载后存储到对应位置及数据库中。

为了在视图中展示这些截图,我计划在settings.py中添加如下配置:

GAMES_FOLDER = Path('/games/')
STATIC_URL = 'static/'
STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static')]
VENV_PATH = os.path.dirname(BASE_DIR)
STATIC_ROOT = os.path.join(VENV_PATH, 'static_root')
SCREENSHOTS_URL = GAMES_FOLDER / "GAME_UUID" / "screenshots" / "IMAGE_UUID.png"
SCREENSHOTS_ROOT = ""

同时在路由中添加:

urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
urlpatterns += static(settings.SCREENSHOTS_URL, document_root=settings.SCREENSHOTS_ROOT)

之后还打算编写自定义模板标签来生成截图URL,因为这些截图并不在通用的静态文件夹内。

我有以下几个疑问:

  • 我是不是把这个问题复杂化了?
  • 如果只是把图片保存到磁盘,是否还需要ImageModel?直接将game.screenshots设为文件名数组是否可行?使用ImageModel有什么必要性?

另外补充一个问题:
我想配置类似这样的路由:

urlpatterns += static(settings.SCREENSHOTS_URL+'<uuid:game_id>/<uuid:image_id>.png', document_root=settings.SCREENSHOTS_ROOT)

这样配置能否让Django找到对应文件夹里的图片?


内容的提问来源于stack exchange,提问作者Daviid

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 09:47:21