9

こんにちは、関数ベースのビューではなく、クラス ベースのビューを使用するようにアプリを移行しています。私の古いコードでは、次の方法で関数ビューに関連するオブジェクトの絶対 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')

ありがとう!

4

5 に答える 5

24

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ですが、少しすっきりしています。

于 2013-01-05T11:29:11.850 に答える
0

この関数は私にとってはうまくいきました、それは複数のパラメータを使用します:

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)})
于 2018-03-29T13:35:06.220 に答える
0

で行う方法は次のとおりです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-06-26T09:05:02.500 に答える