在 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?的主要内容,如果未能解决你的问题,请参考以下文章

Django 模板变量和 Javascript

Django 模板变量和 Javascript

Django 模板变量和 Javascript

Django 模板变量和 Javascript

Django 模板变量和 Javascript

Django 模板变量和 Javascript