Django の@permalink
and とは何ですか? get_absolute_url
いつ、なぜそれを使用するのですか?
非常に単純な例 (実際の実際の例) をお願いします。ありがとう
Django の@permalink
and とは何ですか? get_absolute_url
いつ、なぜそれを使用するのですか?
非常に単純な例 (実際の実際の例) をお願いします。ありがとう
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'),
@permalink
は python decoratorであり、get_absolute_url
は django モデルのメソッドです。
両方とも、特定のオブジェクトの URL を反転できるようにすることに関係しているため、一緒に使用する必要があります。これらは、特定のオブジェクトへのリンクを提供する必要があるとき、またはそのオブジェクトの特定の URL (ある場合) をユーザーに表示する必要があるときにいつでも使用されます。
ハードコードされた文字列を返すメソッドを単純に書くこともできますget_absolute_url
が、これは Django の DRY の哲学に準拠していません (同じことを繰り返さないでください)。代わりに、@permalink
物事をより柔軟にするためのものがあります。
この件に関するドキュメントを読むと、それらが互いにどのように関係しているかがわかります。デコレータはdjango の URLconf のバックエンドにフックし、名前付きの URL パターン@permalink
を使用して、より移植性の高いコードを記述できるようにします。これは、単独で使用するよりも望ましい方法です。パスを指定する必要がないため、コードはより DRYer になります。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")