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
相关产品推荐
相关产品推荐

