在 Django 中有没有办法根据一些预定义的变量只公开一定范围的 URL?
Posted
技术标签:
【中文标题】在 Django 中有没有办法根据一些预定义的变量只公开一定范围的 URL?【英文标题】:Is there a way in Django to expose only a certain range of URLs based on some predefined variable? 【发布时间】:2022-01-06 14:30:49 【问题描述】:我基本上是在尝试在应用程序中公开一系列已定义的 URL。
例如,我在 /metadata/type1_1 和 /metadata/type2_1 托管了 10k x2 资源,其中每个资源分组分别迭代到 type1_10000 和 type2_10000(我打算在手动驱动的时间间隔内提供 20,000 个存储资产)。
因此,我正在尝试定义一个这样的 URL 方案
max_available_metadata = current_limit [例如这可能是 300、7777 等],我只想将模式中的 URL 配置到此限制。例如,如果我将它发送到 25、type1_1、type1_2...25 以及 type2_1、type2_2... type2_25 都会正确映射,但尝试通过 type1_10000 转到 metadata/type1_26 都会返回 404,对于类型 2 也是如此。
我可能想通过 django 管理员配置设置,但这不是问题的一部分。
【问题讨论】:
【参考方案1】:您可以在视图中控制它。
# urls.py
urlpatterns = [
path(
"metadata/type<int:asset_type>_<int:asset_num>/",
views.serve_asset,
),
# views.py
def serve_asset(request, asset_type, asset_num):
if asset_type == 1:
if asset_num <= MAX_ALLOWED_ASSET_NUM:
# do your stuff for asset 1
elif asset_type == 2:
...
raise Http404("Asset not exist")
【讨论】:
以上是关于在 Django 中有没有办法根据一些预定义的变量只公开一定范围的 URL?的主要内容,如果未能解决你的问题,请参考以下文章