【问题标题】:django one template - many views - beginnerdjango 一个模板 - 许多视图 - 初学者
【发布时间】:2014-04-25 01:57:09
【问题描述】:

我已经设法(在很多帮助下)在 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'),

【问题讨论】:

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


    【解决方案1】:

    一些建议:

    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)

    是的 - 可以为您的任务使用一个模板

    您应该将订单类型作为 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。

    【讨论】:

      猜你喜欢
      • 2018-07-02
      • 2016-02-05
      • 2016-04-17
      • 1970-01-01
      • 1970-01-01
      • 2012-11-16
      • 2012-05-11
      • 2011-05-23
      • 1970-01-01
      相关资源
      最近更新 更多