django一个模板 - 很多观点 - 初学者

时间:2014-03-19 03:08:09

标签: python django django-templates django-views django-urls

我已经管理(有很多帮助)在django 1.4.6和python 2.7中创建一个基本的测试博客。

我可以将博客条目显示为列表(主页面),然后允许用户通过单击博客条目链接查看每个博客条目。

我现在正尝试按作者和存档(按博客条目的发布日期)显示博客条目。

是否可以拥有一个博客页面,可以按日期(最近的第一个),按作者和归档(按日期 - 最近的最后一个)列出博客?

我假设代码是在urls.py和views.py文件中编写的,输出到单个博客页面,但我还没有找到一个可以工作的例子而且我不能我自己想出来了。

这是我的models.py:

class BlogPostDetails(models.Model, FillableModelWithLanguageVersion):
    blog_post_title = models.CharField(max_length=50)
    blog_post_date_published = models.DateField()
    blog_post_author = models.CharField(max_length=25)
    blog_post_body = models.TextField()
    blog_post_allow_comments = models.BooleanField(default=False)
    blog_post_timestamp_added = models.DateTimeField(auto_now_add=True, auto_now=False)
    blog_post_timestamp_updated = models.DateTimeField(auto_now=True, auto_now_add=False)

    def __unicode__(self):
        return self.blog_post_title

    class Meta:
        ordering = ['-blog_post_date_published']
        verbose_name = ('Blog')
        verbose_name_plural = ('Blogs')

这是我的views.py:

def blog_post_item(request, blog_posts_id):
    blog_posts  = BlogPostDetails.objects.get(pk=blog_posts_id)
    language_versions = get_language_versions(user=request.user)
    return render(request, 'core/details/blog/blog_item.html', {
        'blog_posts': blog_posts,
        'display_default_language': display_default_language(request.user),
        'languages': LANGUAGES,
        'language_versions': language_versions,
        'language_versions_num': len(language_versions),
})

def blog_post_list(request):
    blog_posts = BlogPostDetails.objects.filter(blog_post_date_published__lt=datetime.today())
    language_versions = get_language_versions(user=request.user)
    return render(request, 'core/details/blog/blog_list.html', {
        'blog_posts': blog_posts,
        'display_default_language': display_default_language(request.user),
        'languages': LANGUAGES,
        'language_versions': language_versions,
        'language_versions_num': len(language_versions),
})

这是我的urls.py

    url(r'^details/blog/blog_list/$', 'blog_post_list', name='blog_post_list'),
    url(r'^details/blog/blog_item/(?P<blog_posts_id>\d+)/$', 'blog_post_item', name='blog_post_item'),

1 个答案:

答案 0 :(得分:0)

一些建议:

  1. 您不应该在模型字段名称中使用模型名称前缀,因为您看到代码看起来更好:

    class BlogPost(models.Model, FillableModelWithLanguageVersion):
        title = models.CharField(max_length=50)
        date_published = models.DateField()
        author = models.CharField(max_length=25)
        body = models.TextField()
        allow_comments = models.BooleanField(default=False)
        timestamp_added = models.DateTimeField(auto_now_add=True, auto_now=False)
        timestamp_updated = models.DateTimeField(auto_now=True, auto_now_add=False)
    
        def __unicode__(self):
            return self.title
    
        class Meta:
            ordering = ['-date_published']
            verbose_name = ('Blog')
            verbose_name_plural = ('Blogs')
    
  2. 将django更新至1.6
  3. 用户class-based views(过滤和订购example
  4. 是的 - 您可以使用一个模板进行任务

    您应该将订单类型作为url参数传递。

    url(r'^details/blog/blog_list/(?P<order_type>\w+)/$', 'blog_post_list', name='blog_post_list'),
    
    
    def blog_post_list(request, order_type='date_published'):
        blog_posts = BlogPost.objects.filter(date_published__lt=datetime.today()).order_by(order_type)
        language_versions = get_language_versions(user=request.user)
        return render(request, 'core/details/blog/blog_list.html', {
            'blog_posts': blog_posts,
            'display_default_language': display_default_language(request.user),
            'languages': LANGUAGES,
            'language_versions': language_versions,
            'language_versions_num': len(language_versions),
    })
    

    如果您想使用一个网址 - 我看到的唯一方法是点击网页上的javascript。