【问题标题】:Reverse django admin custom url with two parameters使用两个参数反向 django admin 自定义 url
【发布时间】:2021-07-28 14:27:08
【问题描述】:

我有以下自定义管理员网址

def get_urls(self):
(...)
info = self.model._meta.app_label, self.model._meta.model_name
urlpatterns = [
            path('<path:object_id>/CompareParameters/<int:parameter_id>', wrap(CompareParameters.as_view()), name='%s_%s_CompareParameters' % info),
        ]

我需要从内联中调用它,它需要两个参数(视图名称包含单词参数的事实只是巧合)

我试过这样做

def pair_parameter(self, obj):
    return mark_safe(f'<a style="padding: 5px; background-color: lightblue;" target="_blank" href="{reverse("admin:agregator_agregatorproduct_compareparameters", args=[obj.ProductId_id, obj.DistributionParameterId_id, ])}">Spárovavat parametr</a>')

还是这样

def pair_parameter(self, obj):
        return mark_safe(f'<a style="padding: 5px; background-color: lightblue;" target="_blank" href="{reverse("admin:agregator_agregatorproduct_" + str(obj.ProductId_id) + "_" + str(obj.DistributionParameterId_id) + "_compareparameters")}">Spárovavat parametr</a>')

以及其他一些没有成功的组合。

正确的方法是什么?最终 URL 看起来像这样

.../admin/agregator/agregatorproduct/1854146/CompareParameters/9330 其中第一个参数是obj.ProductId_id,第二个是obj.DistributionParameterId_id

提前谢谢你。

【问题讨论】:

  • “没有成功”是什么意思?你的测试结果如何?

标签: django django-admin django-urls


【解决方案1】:

找到解决方案 - 供将来参考;

手动输入网址时,在相应视图中

print(request.resolver_match.url_name)

可以使用,返回

agregator_agregatorproduct_CompareParameters

然后我在它前面添加了应用名称,并将两个 ID 传递为args,所以最终的解决方案如下所示

reverse("admin:agregator_agregatorproduct_CompareParameters", args=[obj.ProductId_id, obj.DistributionParameterId_id]) 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-17
    • 2017-12-23
    • 2012-12-05
    • 2011-11-28
    • 2021-06-07
    • 1970-01-01
    相关资源
    最近更新 更多