2009-07-27 15 views
3

できるだけ多くの時間を節約し、できるだけ再利用可能な多くのアプリケーションを作成しようとしていますが、私は少しのロードブロッキングに遭遇しました。あるサイトでは、ブログアプリとニュースアプリがありますが、それらはほぼ同じですが、1つのアプリを作成して必要な場所に拡張して別々のデータベースを持つ2つの別々のアプリとして機能させることができれば、1つのプロジェクト内でDjangoアプリケーションを再利用する

明確にするために、以下の点を考慮してください:関連するすべてのモデル、ビュー、URL構造、およびtemplatetagsを含む単一の汎用のnews_contentアプリケーションを必要とします私が1つのプロジェクトに好きなだけ何度も。

次のようにそれが故障:様々な名前の下でのプロジェクトでは、このアプリを複数回インクルードする方法は

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"対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

これは便利な提案ですが、私が作成するサイトはクライアントのためのものであり、ブログを必要とする場合がありますが、ニュースではない場合があるからです。もちろん、管理ツールでこのアプリを2つの別々のインスタンスとして扱うことはできません。私はちょうどエンドユーザーのためにできるだけ簡単にしたい。 –

+0

管理者に違和感を抱かせたい場合は、AFAIKを使って異なる種類の名前を持つようにモデルを修正する必要があります。これにより、モデル要素の異なる名前を持つコピーアンドペーストクローンが作成されます。 –

2

この場合、新しいアプリケーション全体ではなく、共通のコードをPythonモジュールとして作成することができます。

次に、それぞれのインスタンスで使用する場合は、アプリケーションを作成し、そのモジュールからビットをインポートします。

1

私はあなたの質問を理解しているわけではないので、私は自分の理解を列挙し、あなたと違うかどうか教えてください。

  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:これはtemplateformmodel、およびsuccess_urlストレート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"), 

関連する問題