원하는 것은 장고에 "Next Post"와 "Previous Post"를 만드는 것입니다.Django의 "다음"및 "이전"버튼, Slug가있는 게시물
<a class="btn btn-default" href="{% url 'post_detail' slug=post.slug pk=post.pk|add:'1' %}">Next</a>
이 두 가지 문제가 있습니다 : 내가 지금까지 어떻게 관리해야하는 것은 기본 키 위 하나 현재 포스트 아래 하나입니다 페이지에 단추를 연결하는 하나의 슬러그와 함께와 함께 URL 중 하나이며, 다른 하나는 버튼의 표시 (또는 숨기기)입니다.
다음을 클릭하면 다음 게시물로 이동합니다 (존재하는 경우 해당 페이지가 존재하지 않는다는 오류 메시지가 나타납니다). URL은 이전 게시물과 동일하게 유지됩니다. 세 번 클릭하면 표시된 URL이 두 번째 게시물 중 하나가됩니다. 내가 원하는 것은 어쨌든 해당 슬러그를 표시하는 것입니다.
두 번째 문제는 이전 또는 이후 게시물이없는 경우 단추를 비활성화하려는 것입니다. 그러나 다음 코드 조각은 다음과 같습니다.
{% if post.pk|add:'1' %}
나는 지금까지 무엇을 생각해 냈습니다. 그러나 분명히 그 번호가 있는지 여부를 확인합니다. 게시물이 존재하는지 여부는 아닙니다. 모델 반면
class PostDetailView(HitCountDetailView):
model = Post
slug_field = "title"
count_hit = True
(관련이없는 -에 -이 - 문제 코드 제거)한다 :
@python_2_unicode_compatible
class Post(models.Model, HitCountMixin):
author = models.ForeignKey('auth.User')
title = models.CharField(max_length=100, null=False, blank=False)
text = models.TextField(null=False, blank=False)
slug = models.SlugField(max_length=100, blank=True)
# rewrite save method
def save(self, *args, **kwargs):
if not self.id:
self.slug = slugify(self.title)
super(Post, self).save(*args, **kwargs)
def article_pre_save(signal, instance, sender, **kwargs):
instance.slug = slugify(instance.title)
signals.pre_save.connect(article_pre_save, sender="blog.Post")
# go to post page
def get_absolute_url(self):
return reverse("post_detail", kwargs={'slug':self.slug, 'pk':self.pk})
# retorna o título do post
def __str__(self):
return self.title
및 관련 URL :
를이 페이지의 뷰 클래스는 다음이다
url(_(r'^post/(?P<pk>\d+)-(?P<slug>[-\w]+)/$'), views.PostDetailView.as_view(), name='post_detail'),
어떻게해야합니까? 나는 Raw SQL 쿼리를 작성하는 것에 대해 생각했다. (나는 이것 또한 문제가 있었지만 또 다른 문제이다.) 그러나 지금까지 어떻게 실제로 템플릿에 링크시킬 수 있는지 모르겠다. 원한다면, 당신의 도움에 감사 드리며, 사전에주의를 기울이십시오.
'pk'에 1을 더하거나 빼는 것은 삭제 된 게시물이있을 수 있으므로 ** 좋은 방법이 아닙니다. 존재하지 않는 ID). 더 나은 방법은 뷰에서 템플릿으로 이전 및 다음 post _objects_ (날짜별로 정렬 된 쿼리 작성)를 전달하는 것입니다. 또는'post' 모델에'next_post'와'prev_post' 메소드를 추가 할 수 있습니다. – Selcuk