我正在尝试使用基于类的视图(CBV)重做我的应用视图,并偶然发现这个函数get_absolute_url()在models.py中定义,generic editing views
我已创建模型,之前从未使用过此功能。这是否特定于CBV?
答案 0 :(得分:1)
它并非特定于CBV,您可以在应用程序的任何位置使用它。它使得获取模型实例的url变得更加容易,而不必使用url解析。当您可以在对象本身上调用get_absolute_url
时,也可以更轻松地在模板中获取对象的确定URL。例如,如果要循环遍历对象列表:
{% for post in blog_posts %}
<a href="{{ post.get_absolute_url }}">read post</a>
{% endfor %}
也就是说,在您的视图中使用该方法并没有阻止您:
post = BlogPost.objects.get(...)
url = post.get_absolute_url()
虽然这个方法也没什么特别之处。如果您愿意,可以自己编写get_foo_url()
。例如,我wrote a blog post about a get_admin_url
,一种允许您将Django管理URL添加到对象的方法:
class Book(models.Model):
...
def get_admin_url(self):
content_type = ContentType \
.objects \
.get_for_model(self.__class__)
return reverse("admin:%s_%s_change" % (
content_type.app_label,
content_type.model),
args=(self.id,))
# {{ book.get_admin_url }}