功能基础视图中的django slug

django slug in function base view

我只是个学生。我有另一个 post 喜欢这个代码,但忽略它。我正在尝试渲染视图。

现在我想知道如何将我现有的代码与 slug 一起使用..

这是我的 views.py 使用 id 构建的,

def BookDetail(request, id):
most_recent = Book.objects.order_by('-timestamp')[:3]
book= get_object_or_404(Book, id=id)
form = CommentForm(request.POST or None)
if request.method == "POST":
    if form.is_valid():
        form.instance.user = request.user
        form.instance.post = book
        form.save()
        return redirect(reverse("book-detail", kwargs={
            'id': book.pk
        }))

if request.user.is_anonymous:
    user_membership = None
else:
    try:
        user_membership = Customer.objects.get(user=request.user)
    except Customer.DoesNotExist:
        user_membership = None

context = {
    'user_membership': user_membership,
    'form': form,
    'book': book,
    'most_recent': most_recent,

}
return render(request, 'catalog/book_detail.html', context)

这是我的新书模型,返回 slug 名称,

class Book(models.Model):
slug = models.SlugField(unique=True, help_text="Enter BIC Code", null=True)
title = models.CharField(max_length=200) #more fields after this

timestamp = models.DateTimeField(default=timezone.now)


activeReference = models.ManyToManyField(Membership)


def __str__(self):
    return self.title

def get_absolute_url(self):
    return reverse('book-detail', kwargs={'slug': self.slug})

@property
def get_comments(self):
    return self.comments.all().order_by('-timestamp')

@property
def pages(self):
    return self.page_set.all()

class Page(models.Model):
slug = models.SlugField(max_length=50)
book = models.ForeignKey(Book, on_delete=models.SET_NULL, null=True)
preview = models.FileField(upload_to='book_content', validators=[pdf_file_extension], help_text="PDF File Only")

def __str__(self):
    return self.slug

def get_absolute_url(self):
    return reverse('page-detail',
                   kwargs={
                       'book_slug': self.book.slug,
                       'page_slug': self.slug
                   })

我希望你能帮助我。

您只需将 id 更改为 slug,如下所示:

def BookDetail(request, slug):
    most_recent = Book.objects.order_by('-timestamp')[:3]
    book= get_object_or_404(Book, slug=slug)
    ...