将args和kwargs传递给反向Django

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将args和kwargs传递给反向Django相关的知识,希望对你有一定的参考价值。

我认为这是一个非常简单的问题,请问我一点。

我的链接设置如下:page/<key>其中密钥是随机生成的密钥,在此处设置:

reverse('page', args=(key,))

但是,我也想将数据传递到page/<key>端点。但是,如果我在此处将另一个变量添加到args中:reverse('page', args=(key, more_data)),则在尝试打开位于page/<key>/<more_data>

的url时,它会变得混乱

此外,django不允许在一次反向调用中使用args和kwargs。那我该如何传递数据?谢谢!

答案
正如@ willem-van-onsem所评论的reverse只是构建URL,您需要重定向到它,您可以在视图中添加如下内容:

return HttpResponseRedirect(reverse('page', kwargs={'key': 'value'}))

查看有关此文档:

https://docs.djangoproject.com/en/3.0/ref/urlresolvers/

另一答案
[我假设您要发送的kwarg用于该页面上,以帮助确定要呈现的内容/如何呈现它们,而不用作标识符或不进行URL签名。

如果是这种情况,我们将您的背景色示例张贴在另一个答案的注释中。有很多不同的方法可以实际使用从目标页面上获取的数据来显示颜色,因此我认为这超出了范围。如果您使用javascript进行此操作,URLSearchParams是您要研究的内容。

传递数据的标准方法是使用url查询参数(您有时在url中看到的?key=value内容。

这是使用python和django生成通过电子邮件发送的url的方式:

from urllib.parse import urlencode from django.urls import reverse url_params = {"background_color": "#000000"} url = reverse("page", kwargs={"key": generate_key()}) + f"?{urlencode(url_kwargs)}"

[如果要使发送的数据不那么明显,可以在base64中编码url params字典,然后将其作为“设置”参数发送,可以在javascript中解码和使用。

以上是关于将args和kwargs传递给反向Django的主要内容,如果未能解决你的问题,请参考以下文章

将 kwargs 传递给 Django 过滤器

将kwargs传递给django管理表单

Django REST:Auth用户未传递给序列化程序错误 - 需要字段

如何在 django 的 ajax url 中传递 kwargs?未找到带有参数 '('',)' 的 '' 的反向操作。尝试了 1 种模式:['partners/analytics/(?P<id

参数arg、*args、**kwargs三个的区别

python *args 与 **kwargs