我应该在Django中使用哪个URL链接模式

qq24tv8q  于 2023-10-21  发布在  Go
关注(0)|答案(1)|浏览(141)

请帮我看看这个问题。
我刚刚发现有一些方法可以在Django中创建链接:

1. <a href='/blog/{{ object.id }}'>{{ object.title }}</a>

2. <a href='{% url "blog:detail" id=object.id %}'>{{ object.title }}</a>

3. <a href='{{ object.get_absolute_url }}'>{{ object.title }}</a>

什么时候应该使用这些模式?去科隆有什么特别的吗?太感谢了

7y4bm7vi

7y4bm7vi1#

通常,如果你重定向到一个对象的 canonical page,使用**.get_absolute_url()方法[Django-doc]是有意义的。但是get_absolute_url()方法应该使用reverse(…)**函数[Django-doc]来指定视图的名称,所以你的模型应该看起来像这样:

from django.urls import reverse

class MyModel(models.Model):

    def get_absolute_url(self):
        return reverse('blog:detail', kwargs={'id': self.pk })

这将确保它将正确地在主键中对数据进行URL编码,并在您稍后重新组织URL时链接到正确的路径(但实际上您不应该首先重新组织URL,请参阅Cool URLs don't change publication of the W3 organization)。
如果你的模型没有规范的URL,或者你想链接到不同的东西,最好使用**{% url … %}**模板标签[Django-doc]。这个模板标签在幕后做了很多工作:(1)查找视图名称;(2)如果找不到视图,或者如果参数不符合,则会引发错误;(3)对URL参数进行URL编码;以及(4)它将确保通过写入绝对URL,这将不会访问由于相对路径而不存在的路径。
像在第一个示例中那样构造手动路径并不是一个好主意。例如,如果{{ object.id }}包含一个问号(?)或一个哈希(#),如果URL没有正确编码这些字符,它将不会呈现这些字符,从而构造一个 * 无效 * 的URL。

相关问题