2009-07-27 203 views
3

爲了儘量節省開發時間並儘可能多地使我的應用程序儘可能重用,我遇到了一些障礙。在一個網站中,我有一個博客應用程序和一個新聞應用程序,這些應用程序大致相同,如果我可以製作單個應用程序並在必要時擴展應用程序,顯然它會更容易,然後將其作爲兩個單獨的應用程序與單獨的數據庫一起使用,等等。在單個項目中重複使用Django應用程序

要澄清,請考慮以下內容:假設我想擁有一個通用的news_content應用程序,其中包含所有相關的模型,視圖,網址結構和模板標籤,然後可以在必要時包含和擴展儘可能多地進入單個項目。

它分解如下:

news_content/ 
    templatetags/ 
     __init__.py 
     news_content.py 
    __init__.py 
    models.py (defines generic models - news_item, category, etc.) 
    views.py (generic views for news, archiving, etc.) 
    urls.py 
    admin.py 

有沒有辦法來這個程序多次包括名目繁多的一個項目?我覺得它應該是顯而易見的,我只是沒有清楚地考慮它。有沒有人有這方面的經驗?

我很感謝任何建議,人們可以給。謝謝。

回答

3

博客和新聞之間的實際區別是什麼?也許這種差異應該成爲博客/新聞應用程序的一部分,並且只包含一次。

如果您的博客頁面包含博客條目和帶有新聞條目的新聞頁面,唯一的區別是數據庫中的字段(kind_of_item =「blog」vs. kind_of_item =「news」),那麼也許您有這個。

urls.py

(r'^/(?P<kind>blog)/$', 'view.stuff'), 
(r'^/(?P<kind>news)/$', 'view.stuff'), 

views.py

def stuff(request, kind): 
    content= news_blog.objects.filter(kind=kind) 
    return render_to_response(kind+"_page", { 'content': content }) 

也許你並不需要相同的應用程序的兩倍,但需要擴展的應用程序來處理這兩個用例。

+0

這是一個有用的建議,但是我會猶豫不決,因爲我生產的網站是爲客戶提供的,而且可能會有他們需要博客而不是新聞的情況。當然,除非可以在管理工具中將這個應用程序作爲兩個單獨的實例來處理。我只是想讓最終用戶儘可能簡單。 – 2009-07-27 14:48:24

2

在這種情況下,您可以創建一個普通的代碼塊作爲Python模塊而不是整個新的應用程序。

然後,對於每個實例,您想要使用它,創建一個應用程序並從該模塊導入位。

1

我不是100%確定我理解你的問題,所以我要列出我的理解,並讓我知道它是否與你的不同。

  1. 您希望網站的「新聞」和「博客」部分具有相同的功能。
  2. 您希望將「新聞」和「博客」條目單獨存儲在數據庫中,以免它們混合在一起。

如果是這樣,我會建議爲您的意見製作一個API。事情是這樣的:

views.py

def view_article(request, article_slug, 
     template_name='view_article.html', 
     form_class=CommentForm, 
     model_class=NewsArticle, 
     success_url=None, 
     ): 

urls.py

(r'^news/(?P<article_slug>[-\w]+)/$', 'view_article', {}, "view_news_article"), 
(r'^blog/(?P<article_slug>[-\w]+)/$', 'view_article', {'model_class': BlogArticle}, "view_blog_article"), 

這使得你的應用程序高度可重用通過提供覆蓋templateformmodel,並success_url直接從urls.py的能力。

相關問題