Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Html 如何在我的Django博客中获得上一篇和下一篇文章?_Html_Django_Python 2.7_Templates - Fatal编程技术网

Html 如何在我的Django博客中获得上一篇和下一篇文章?

Html 如何在我的Django博客中获得上一篇和下一篇文章?,html,django,python-2.7,templates,Html,Django,Python 2.7,Templates,我知道Django已经有了通过_FOO获取_previous_和通过_FOO获取_next_的方法,但我不知道如何在我的模板和视图中使用它们。所以,请帮助我使这两种方法适用于我的项目 我正在运行Django1.7和Python2.7,我的应用程序名是blog 这是我对应的文件: blog/views.py def view_post(request, slug): post = get_object_or_404(Post, slug=slug) return render_to

我知道Django已经有了通过_FOO获取_previous_和通过_FOO获取_next_的方法,但我不知道如何在我的模板和视图中使用它们。所以,请帮助我使这两种方法适用于我的项目

我正在运行
Django1.7
Python2.7
,我的应用程序名是
blog
这是我对应的文件:

blog/views.py

def view_post(request, slug):
    post = get_object_or_404(Post, slug=slug)
    return render_to_response('blog/blog_post.html',
            {
                'post':post,
            },
            context_instance=RequestContext(request))



class PublishedPostMixin(object):
    def get_queryset(self):
        return self.model.objects.live()


class PostDetailView(PublishedPostMixin,DetailView):
    model = Post
class Post(models.Model):
    created_at = models.DateTimeField(auto_now_add=True, editable=False)
    updated_at = models.DateTimeField(auto_now=True, editable=False)
    title = models.CharField(max_length=255)
    slug = models.SlugField(max_length=255,unique=True) 
    content = MarkdownField()
    published = models.BooleanField(default=True)
    author = models.ForeignKey(User, related_name="posts")
    tags = models.ManyToManyField(Tag)

    class Meta:
        ordering = ["-created_at", "title"]

    def __unicode__(self):
        return self.title

    def save(self, *args, ** kwargs):
        if not self.slug:
            self.slug = slugify(self.title) #title become the slug
        super(Post, self).save(*args,**kwargs)

    @models.permalink
    def get_absolute_url(self):
        return ("blog:detail",(),{'slug':self.slug
                            })
urlpatterns = patterns('',
    url(r"^(?P<slug>[\w-]+)/$",view_post, name="detail"),
)
blog/models.py

def view_post(request, slug):
    post = get_object_or_404(Post, slug=slug)
    return render_to_response('blog/blog_post.html',
            {
                'post':post,
            },
            context_instance=RequestContext(request))



class PublishedPostMixin(object):
    def get_queryset(self):
        return self.model.objects.live()


class PostDetailView(PublishedPostMixin,DetailView):
    model = Post
class Post(models.Model):
    created_at = models.DateTimeField(auto_now_add=True, editable=False)
    updated_at = models.DateTimeField(auto_now=True, editable=False)
    title = models.CharField(max_length=255)
    slug = models.SlugField(max_length=255,unique=True) 
    content = MarkdownField()
    published = models.BooleanField(default=True)
    author = models.ForeignKey(User, related_name="posts")
    tags = models.ManyToManyField(Tag)

    class Meta:
        ordering = ["-created_at", "title"]

    def __unicode__(self):
        return self.title

    def save(self, *args, ** kwargs):
        if not self.slug:
            self.slug = slugify(self.title) #title become the slug
        super(Post, self).save(*args,**kwargs)

    @models.permalink
    def get_absolute_url(self):
        return ("blog:detail",(),{'slug':self.slug
                            })
urlpatterns = patterns('',
    url(r"^(?P<slug>[\w-]+)/$",view_post, name="detail"),
)
blog/url.py

def view_post(request, slug):
    post = get_object_or_404(Post, slug=slug)
    return render_to_response('blog/blog_post.html',
            {
                'post':post,
            },
            context_instance=RequestContext(request))



class PublishedPostMixin(object):
    def get_queryset(self):
        return self.model.objects.live()


class PostDetailView(PublishedPostMixin,DetailView):
    model = Post
class Post(models.Model):
    created_at = models.DateTimeField(auto_now_add=True, editable=False)
    updated_at = models.DateTimeField(auto_now=True, editable=False)
    title = models.CharField(max_length=255)
    slug = models.SlugField(max_length=255,unique=True) 
    content = MarkdownField()
    published = models.BooleanField(default=True)
    author = models.ForeignKey(User, related_name="posts")
    tags = models.ManyToManyField(Tag)

    class Meta:
        ordering = ["-created_at", "title"]

    def __unicode__(self):
        return self.title

    def save(self, *args, ** kwargs):
        if not self.slug:
            self.slug = slugify(self.title) #title become the slug
        super(Post, self).save(*args,**kwargs)

    @models.permalink
    def get_absolute_url(self):
        return ("blog:detail",(),{'slug':self.slug
                            })
urlpatterns = patterns('',
    url(r"^(?P<slug>[\w-]+)/$",view_post, name="detail"),
)
urlpatterns=patterns(“”,
url(r“^(?P[\w-]+)/$”,查看文章,name=“detail”),
)
模板

{{post.content | markdown}}


最后,我通过在模板中引入url标记解决了这个问题。这是我修改过的模板

{% load url from future %}    
<ul class="pager">
        {% if post.get_next_by_created_at %}
            <li class="previous">
                 <a href="{% url 'blog:detail' post.get_next_by_created_at.slug %}">&larr; Previous Post</a>
            </li>
        {% endif %}
        {% if post.get_previous_by_created_at %}
            <li class="next">
                 <a href="{% url 'blog:detail' post.get_previous_by_created_at.slug %}">Next Post &rarr;</a>
            </li>
        {% endif %}
    </ul>
{%从未来加载url%}
    {%if post.get_next_by_created_at%}
  • {%endif%} {%if post.get_previous_by_created_at%}
  • {%endif%}

那么,会发生什么?href字段是否为空?对于Django 1.11,{%load url from future%}不再需要href字段以这种方式获取下一篇/上一篇文章的倾斜度。