2009-07-27 100 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的能力。

相关问题