2014-03-19 30 views
2

我已經管理(有很多幫助)在django 1.4.6和python 2.7中創建一個基本的測試博客。django一個模板 - 很多意見 - 初學者

我可以將博客條目顯示爲列表(主頁),然後允許用戶通過單擊博客條目鏈接查看每個單獨的博客條目。

我現在試圖按作者和歸檔(按博客條目的發佈日期)顯示博客條目。

是否有可能有一個博客頁面可以按日期列出博客(最近的第一),由作者和檔案(由日期 - 最近的最後一次)?

我假設代碼是寫在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'), 

回答

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

是的 - 它是更多鈔票用一個模板,你任務

你應該通過訂單類型爲URL parame之三。

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排序的唯一途徑。