什么是@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,))
Run Code Online (Sandbox Code Playgroud)
然后在urls.py中有一个指向您的视图的条目:
url(r'^(?P<slug>[-\w\d\_]+)/$',
MyModelDetailView.as_view(),
name='mymodel_detail'),
Run Code Online (Sandbox Code Playgroud)
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,])
Run Code Online (Sandbox Code Playgroud)
并在urls.py
...
url(r'/blog/(?P<slug>[-w]+)/$', blog.views.blog_detail, name="blog-detail")
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
18804 次 |
| 最近记录: |