什么是@permalink和get_absolute_urlDjango?何时以及为何使用它?
请一个非常简单的例子(一个真实的例子).谢谢
Mar*_*ian 85
截至2013年,Django文档不鼓励使用永久链接装饰器,并鼓励在get_absolute_url方法的主体中使用reverse().到2015年,永久链接装饰器似乎已经消失,没有来自Django文档的痕迹,最终在2018年的Django 2.1版本中删除了它.
因此,对于创建指向单个对象视图的永久链接的标准DRY方式,请在模型中使用get_absolute_url(),如下所示:
from django.db import models
from django.urls import reverse
#  NOTE: pre Django 1.10+ this is "from django.core.urlresolvers import reverse"
class MyModel(models.Model):
    slug = models.SlugField()
    def get_absolute_url(self):
        return reverse('mymodel_detail', args=(self.slug,))
然后在urls.py中有一个指向您的视图的条目:
url(r'^(?P<slug>[-\w\d\_]+)/$',
    MyModelDetailView.as_view(),
    name='mymodel_detail'),
Tim*_*ony 35
@permalink是一个python 装饰器,而get_absolute_urldjango模型是一个方法.
两者都涉及允许您反转特定对象的URL,并且应该一起使用.它们可以在您需要提供指向特定对象的链接时使用,或者希望将该对象的特定URL(如果有)显示给用户
你可以简单地编写你的get_absolute_url方法来返回一个硬编码的字符串,但这不符合Django的DRY哲学(不要重复自己).相反,有@permalink使事情更灵活.
如果您阅读有关该主题的文档,您将看到它们之间的相互关系.该@permalink装饰挂接到Django的URL配置的后端,允许您使用写更多的可移植的代码名为url模式.这比仅仅使用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")
| 归档时间: | 
 | 
| 查看次数: | 18804 次 | 
| 最近记录: |