簡體   English   中英

使用基於類的視圖時,在Django中獲取絕對URL

[英]Get Absolute URL in Django when using Class Based Views

您好我正在遷移我的應用程序以使用基於類的視圖而不是基於函數的視圖。 在我的舊代碼中,我能夠以這種方式獲取與函數視圖相關的對象的絕對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)])

我無法在我的獲取絕對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')

謝謝!

您應始終為您的網址命名,並參考:

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相同,但是有點整潔。

這是我的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})

我的urls.py位於“products”應用程序下,因此url名稱空間為“products:product”

這個功能對我有用,它使用多個參數:

def get_absolute_url(self):
return reverse('video', kwargs={'slug':self.chapiter.course.slug,'chpiter_slug':self.chapiter.chpiterSlug,'pk':str(self.index).zfill(2)})

這是你在Django >= 2.0

urls.py

from django.urls import path

app_name = 'my_app'

urlpatterns = [
    path('products/<slug:slug>', views.ProductDetailView.as_view(), name='products')
]

將以下代碼添加到models.py

class Product(models.Model):
    name = models.CharField(max_length=125)
    slug = models.SlugField(unique=True)
    # rest of the fields

   def get_absolute_url(self):
         return reverse('my_app:products', kwargs={'slug': self.slug})

要顯示詳細信息,請在views.py添加通用視圖

class ProductDetailView(DetailView):
     template_name = 'my_app/detail.html'

     def get_queryset(self):
         return Product.objects.all()

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM