Django 的@permalinkget_absolute_url是什么?什么时候使用,why次使用?

请给出一个非常简单的例子(一个实际的例子).谢谢

推荐答案

@permalink是Python decorator,而get_absolute_url是Django模型上的方法.

两者都涉及允许您反转特定对象的URL,应该一起使用.只要您需要提供指向特定对象的链接,或者想要向用户显示该对象的特定URL(如果有),就可以随时使用它们

您可以简单地编写get_absolute_url方法来返回硬编码字符串,但这不符合Django的DRY哲学(不要重复).取而代之的是让事情变得更加灵活的@permalink.

如果你读了the docs on the subject本书,你会发现它们是如何相互联系的.@permalink修饰器连接到Django的URLconf的后端,允许您使用named url patterns编写更多可移植的代码.这比单独使用get_absolute_url更可取:您的代码变得更加枯燥,因为您不必指定路径.

class BlogPost(models.Model):
    name = modelsCharField()
    slug = models.SlugField(...)

    @permalink
    def get_absolute_url(self):
        return ("blog-detail", [self.slug,])

和urls.py中

    ...
    url(r'/blog/(?P<slug>[-w]+)/$', blog.views.blog_detail, name="blog-detail")

Django相关问答推荐

Django REST framework:object has no attributed after annotation;Got attributeError when try to get a value for field field on serializer<>

Django-将html数据保存到quillfield中

Django ORM Groupby

在生产中添加整型主键

django-filter compose 过滤的 url

如何使更新记录在 Django 模型中传递信号?

Django 按月分组并按月显示在模板中

Django Rest Framework 认证类覆盖 request.user

CsrfViewMiddleware 和 enforce_csrf 有什么区别?

EmailBackend 用于在 Django 中通过多个 SMTP 发送邮箱

在 PyCharm 中运行 Django 测试

更好的 ArrayField 管理小部件?

django 表单为关键字参数获取了多个值

django:TypeError:'tuple'对象不可调用

django 管理列表中的外键显示

Python - 覆盖 __init__ 的最干净方法,其中在 super() 调用之后必须使用可选的 kwarg?

使用 get_object_or_404 获取数据库值

响应发送到客户端后在 Django 中执行代码

您如何在本地针对 OpenID 进行开发

Heroku & Django:OSError: No such file or directory:'/app/{myappname}/static'