您好,我正在迁移我的应用程序使用基于类的视图,而不是基于函数的视图。在我的旧代码中,我能够以这种方式获得与函数视图相关的对象的绝对URL:
class Category(models.Model):
name = models.CharField(max_length=100,unique=True)
slug = models.SlugField(unique=True)
description = models.TextField()
parent = models.ForeignKey('self',null=True,blank=True)
def get_absolute_url(self):
return reverse('blog.views.showcategory',args=[str(self.slug)])
我找不到为了得到相同的结果,我应该在get absolute url函数中做什么更改。
这是我新的基于类的视图
class CategoryView(ListPosts):
template_name = "postlist.html"
context_object_name="posts"
def get_queryset(self):
return Post.objects.filter(category__slug=self.kwargs['slug']).order_by('created')
谢谢!
发布于 2013-01-05 19:29:12
您应该始终为您的URL指定一个名称,并引用它:
url(r'/category/(?P<slug>\w+)/$', CategoryView.as_view(), name='category_view'),
现在:
@models.permalink
def get_absolute_url(self):
return ('category_view', (), {'slug': self.slug})
注意,我使用了固定链接装饰器,它的作用与调用reverse
相同,但更简洁一些。
发布于 2014-02-05 22:38:01
下面是我的get_absolute_url
配置:
urls.py
urlpatterns = patterns('',
url(r'^products/(?P<slug>[\w\d\-\_]+)/$', views.ProductView.as_view(), name='product'),
)
models.py
def get_absolute_url(self):
return reverse('products:product', kwargs={'slug':self.slug})
我的产品在"products“应用程序下,所以url名称空间是”urls.py :product“
发布于 2018-09-15 15:35:23
这个问题的2018年答案与@Aaron的答案基本相同,但为了快速访问,这里是:
def get_absolute_url(self):
from django.urls import reverse
return reverse('people.views.details', args=[str(self.id)])
来自https://docs.djangoproject.com/en/2.1/ref/models/instances/#get-absolute-url
https://stackoverflow.com/questions/14170473
复制相似问题