请帮我看看这个问题。
我刚刚发现有一些方法可以在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>
什么时候应该使用这些模式?去科隆有什么特别的吗?太感谢了
1条答案
按热度按时间7y4bm7vi1#
通常,如果你重定向到一个对象的 canonical page,使用**
.get_absolute_url()
方法[Django-doc]是有意义的。但是get_absolute_url()
方法应该使用reverse(…)
**函数[Django-doc]来指定视图的名称,所以你的模型应该看起来像这样:这将确保它将正确地在主键中对数据进行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。