【问题标题】:Which URL link pattern should I use in Django我应该在 Django 中使用哪种 URL 链接模式
【发布时间】:2021-09-24 15:59:15
【问题描述】:

请帮我看看这个问题。

我刚刚发现有一些方法可以在 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>

什么时候应该使用这些模式?每个人都有什么特别的吗? 非常感谢。

【问题讨论】:

    标签: python django url


    【解决方案1】:

    通常如果您重定向到对象的规范页面,使用.get_absolute_url() method [Django-doc] 是有意义的。 get_absolute_url() 方法应该使用 reverse(…) function [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 … %} template tag [Django-doc]。这个模板标签在幕后做了很多工作:(1)它查找视图名称; (2) 如果找不到该视图,或者参数不符合要求,则会引发错误; (3) 对 URL 参数进行 URL 编码; (4) 它将通过编写绝对 URL 来确保不会访问由于相对路径不存在的路径。

    像第一个示例中那样构建手动路径不是一个好主意。例如,如果{{ object.id }} 包含问号 (?) 或哈希 (#),如果没有正确编码这些字符,它将不会呈现这些字符,从而构造一个 invalid URL .

    【讨论】:

    • 您的信息很有帮助。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2020-08-08
    • 2010-10-09
    • 1970-01-01
    • 2011-10-05
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    相关资源
    最近更新 更多