2011-07-04 19 views
1

工作我真的希望有人能闡明這個問題一些光,獲得Django的預覽與非發佈的文章

我建立了我使用的Django的CMS網站新和博客應用。客戶要求博客和新聞發佈經過編輯它們發佈到網站之前

要做到這一點我做了以下

def publish(self, request, queryset): 
    rows_updated = queryset.update(status='p') 
    if rows_updated == 1: 
     message_bit = "1 story was" 
    else: 
     message_bit = "%s stories were" % rows_updated 
    self.message_user(request, "%s successfully marked as published." % message_bit) 

def un_publish(self, request, queryset): 
    rows_updated = queryset.update(status='w') 
    if rows_updated == 1: 
     message_bit = "1 entry was" 
    else: 
     message_bit = "%s entries were" % rows_updated 
    self.message_user(request, "%s successfully marked as un-published." % message_bit) 
模型管理

每個模型(博客和新聞)這個允許客戶更新博客的狀態或發佈新帖子等。但是,客戶還要求他們能夠在發佈之前預覽帖子。由於我的博客和新查詢集僅返回發佈狀態爲「p」的發佈,新版/博客匹配查詢在嘗試使用django的管理界面中內置的預覽功能查看帖子時失敗

有沒有人得到了這一點也許周圍的工作建議的東西我可以嘗試得到這個工作

感謝

回答

3

爲了保持代碼乾淨,你可以創建一個渲染頁面的方式爲標準的一相同,但沒有過濾過的狀態單獨視圖。

比管理鏈接工作編輯/添加get_absolute_url,以便在state =「w」的情況下,它返回新視圖的地址。即:

def get_absolute_url(self): 
    if self.status == 'p' 
     return "/post/%i/" % self.id 
    else: 
     return "/preview/post/%i/" % self.id 

PS:如果你是一個純粹的,你可能更喜歡使用永久裝飾:)

@models.permalink 
def get_absolute_url(self): 
    if self.status == 'p' 
     return ('post.views.details', [str(self.id)]) 
    else: 
     return ('post.views.preview', [str(self.id)]) 

參見:http://docs.djangoproject.com/en/dev/ref/models/instances/

+0

偉大的答案感謝奏效一種享受!太簡單了!不知道爲什麼我沒有想到它!非常感謝 –

+0

我很高興它幫助! – Munhitsu