繁体   English   中英

Django中的部分反向URL查找

[英]Partial reverse url lookup in django

我正在寻找一种有效地对大量Django模型实例进行反向URL查找的方法,理想情况下,无需为每个实例调用一次reverse() 我的原始代码如下所示:

urls = []
for foo in Foo.objects.all():
    url = django.core.urlresolvers.reverse("foo_details", kwargs={"ver": foo.version,
                                                                  "locale": foo.locale,
                                                                  "name": foo.name})
    urls.append(url)

但是,由于有大量(数千个)Foo对象,因此此过程花费了太长时间。 因此,我一次伪造了一个“部分” URL查找,然后完成了每个实例的工作:

base_url = django.core.urlresolvers.reverse("foo_details", kwargs={"ver": foo.version,
                                                                   "locale": foo.locale,
                                                                   "name": ""})
urls = []
for foo in Foo.objects.all():
    url = base_url + urlquote(foo.name)
    urls.append(url)

这行得通,并且比我的第一个解决方案快得多,但是我现在对url的形式进行了假设,特别是名称总是出现在最后。 另外,我想为此使用get_absolute_url() ,但这消除了仅对URL进行部分反转一次,然后完成每个对象的反转的可能性。

这真的是唯一的方法吗? 还有其他方法可以保留部分反向查找,然后为每个对象完成URL吗?

我通常会按照

placeholder = "__placeholder___"
base = reverse("foo_details", 
               kwargs={"ver": foo.version,
                       "locale": foo.locale,
                       "name": placeholder})
# ...
url = base.replace(placeholder, foo.name)

围绕假设名称是最后一个路径组成部分工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM