Django在不同页面上显示博客文章

时间:2018-01-03 21:15:30

标签: python django url views blogs

我对Django很新,我一直在关注构建一个简单的博客应用程序的教程。我的应用程序到目前为止工作正常(使用Django 1.8.6)。这是我的urls.py,views.py和models.py:

urls.py

urlpatterns = [
    url('admin/', admin.site.urls),
    url(r'^blog/', include('blog.urls', namespace='blog', app_name='blog')),

博客/ urls.py

urlpatterns = [
   url(r'^$', views.post_list, name='post_list'),
   url(r'^(?P<year>\d{4})/(?P<month>\d{2})/(?P<day>\d{2})/'\
       r'(?P<post>[-\w]+)/$',
       views.post_detail,
       name='post_detail'),
    url(r'^tag/(?P<tag_slug>[-\w]+)/$', views.post_list,
       name='post_list_by_tag'),    
]

博客/ views.py

def post_list(request, tag_slug=None):
    object_list = Post.published.all()
    tag = None
    if tag_slug:
        tag = get_object_or_404(Tag, slug=tag_slug) 
        object_list = object_list.filter(tags__in=[tag])
    return render(request,
                 'blog/post/list.html',
                 {
                 'posts': posts,
                 'tag': tag
                 })


def post_detail(request, year, month, day, post):
   post = get_object_or_404(Post, slug=post,
                                  status='published',
                                  publish__year=year,
                                  publish__month=month,
                                  publish__day=day)
   post_tags_ids = post.tags.values_list('id', flat=True)
   similar_posts = Post.published.filter(tags__in=post_tags_ids)\
                                 .exclude(id=post.id)
   similar_posts = similar_posts.annotate(same_tags=Count('tags'))\
                               .order_by('-same_tags','-publish')[:4]
   return render(request,
                 'blog/post/detail.html',
                 {'post': post,
                 'similar_posts': similar_posts})

博客/ models.py

class Post(models.Model):
    STATUS_CHOICES = (
       ('draft', 'Draft'),
       ('published', 'Published'),
    )
    title = models.CharField(max_length=250)
    slug = models.SlugField(max_length=250,
                           unique_for_date='publish')
    author = models.ForeignKey(User,
                              related_name='blog_posts', on_delete=models.CASCADE)
    body = models.TextField()
    publish = models.DateTimeField(default=timezone.now)
    created = models.DateTimeField(auto_now_add=True)
    updated = models.DateTimeField(auto_now=True)
    status = models.CharField(max_length=10,
                             choices=STATUS_CHOICES,
                             default='published')
    tags = TaggableManager()

    class Meta:
       ordering = ('-publish',)
    def __str__(self):
       return self.title

    def get_absolute_url(self):
           return reverse('blog:post_detail',
                          args=[self.publish.year,
                                self.publish.strftime('%m'),
                                self.publish.strftime('%d'),
                                self.slug])


    objects = models.Manager() # The default manager.
    published = PublishedManager() # Our custom manager.

现在我想创建4个页面,每个博客帖子都应该根据作者的选择显示在其中一个页面上。我希望我的网页有一个自定义模板,允许我在博客帖子上方添加其他主页内容。我的想法是创建一个“页面”应用程序,其中包含一个由博客模板扩展的模板。在博客模型中,我将实现“pagedisplay”字段,其中cms中的作者可以选择他想要显示帖子的页面。 所以本质上不是在www.example.com/blog页面上显示所有帖子并从那里链接到它们,我想根据作者的选择在多个页面上分发它们。 最后,对于个别帖子,网址应该看起来有点像这样。

 www.example.com/page2/2017/12/30/post1/

 www.example.com/page2 

应显示该页面上发布的最近帖子的列表。 根据我的理解,这意味着在我的urlpatterns中,我首先需要访问pages.urls.py,然后才能访问。 我正在努力学习如何从pages / urls.py和pages / views.py中正确构建各个帖子的网址,以及如何在模板中正确呈现这些网址。关于这个问题的任何建议或我是否应该采取完全不同的方法,我们非常感谢。

0 个答案:

没有答案