Python 在单个项目中重用Django应用程序

Python 在单个项目中重用Django应用程序,python,django,Python,Django,为了在开发过程中尽可能地节省时间,尽可能多地重用应用程序,我遇到了一些障碍。在一个网站上,我有一个博客应用程序和一个新闻应用程序,它们基本上是相同的。显然,如果我可以制作一个应用程序,并在必要时进行扩展,然后将其作为两个独立的应用程序使用,并具有独立的数据库,这会更容易 澄清,考虑以下内容:假设地,我希望有一个单一的、通用的新闻内容应用程序,包含所有相关的模型、视图、URL结构和TEMPLATETAGS,然后我可以在必要的时候将其包含和扩展到我喜欢的一个项目中。 其细分如下: news_cont

为了在开发过程中尽可能地节省时间,尽可能多地重用应用程序,我遇到了一些障碍。在一个网站上,我有一个博客应用程序和一个新闻应用程序,它们基本上是相同的。显然,如果我可以制作一个应用程序,并在必要时进行扩展,然后将其作为两个独立的应用程序使用,并具有独立的数据库,这会更容易

澄清,考虑以下内容:假设地,我希望有一个单一的、通用的新闻内容应用程序,包含所有相关的模型、视图、URL结构和TEMPLATETAGS,然后我可以在必要的时候将其包含和扩展到我喜欢的一个项目中。 其细分如下:

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
有没有办法在一个项目中多次以不同的名称包含此应用程序?我觉得这应该是显而易见的,我只是没有想清楚。有人有这方面的经验吗


我很感激人们能给我的任何建议。谢谢。

在本例中,您可以将公共代码片段创建为Python模块,而不是一个全新的应用程序


然后,对于您想要使用它的每个实例,创建一个应用程序并从该模块导入位。

博客和新闻之间的实际区别是什么?也许这种差异应该成为博客/新闻应用程序的一部分,而你只需将其包含一次

如果您有一个包含博客条目的博客页面和一个包含新闻条目的新闻页面,唯一的区别是数据库中的一个字段(kind\u of_item=“blog”与kind\u of_item=“news”),那么您可能有这个字段

url.py

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

也许您不需要两次使用同一个应用程序,但需要扩展该应用程序以处理这两个用例。

我不能100%确定我是否理解您的问题,因此我将列出我的理解,并让我知道它是否与您的不同

  • 你想在你的网站上有一个功能相同的“新闻”和“博客”部分
  • 您希望将“新闻”和“博客”条目分别存储在数据库中,这样它们就不会混合在一起
  • 如果是这样,我建议为您的视图制作一个API。大概是这样的:

    views.py

    def view_article(request, article_slug,
            template_name='view_article.html',
            form_class=CommentForm,
            model_class=NewsArticle,
            success_url=None,
            ):
    
    (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"),
    
    url.py

    def view_article(request, article_slug,
            template_name='view_article.html',
            form_class=CommentForm,
            model_class=NewsArticle,
            success_url=None,
            ):
    
    (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"),
    
    (r'^news/(?P[-\w]+)/$,'查看文章',{},“查看新闻文章”),
    (r“^blog/(?P[-\w]+)/$”、“查看文章”、{'model_class':blogcarticle}、“查看博客文章”),
    

    通过提供直接从
    url.py

    覆盖
    模板
    表单
    模型
    、和
    成功url
    的功能,这使得你的应用程序具有高度的可重用性。这是一个有用的建议,但我会犹豫是否将其包括在内,因为我创建的网站是为客户提供的,而且,在某些情况下,他们可能需要一个博客,但不需要新闻。当然,除非可以在管理工具中将此应用程序作为两个单独的实例处理。我只是想让最终用户尽可能简单。如果你想让管理员看起来不一样,那么你必须修复模型,使其具有不同的名称。这将使它们相互复制并粘贴具有不同模型元素名称的克隆。