0

私は共通コンポーネントを使用して Web アプリを開発しており、これらの共通コンポーネント (ビュー、テンプレート、ロジック) を Django パッケージにパックすることにしました。

問題は、プロジェクトに応じて、パッケージから特定の Django プロジェクトの変数にアクセスしたいということです。この特定の例では:

私の Django パッケージには管理パネルがあります。アルゴリズムのリストを管理できるカスタムメイドの管理パネル。ただし、これらのアルゴリズムは変更されます。ある特定の Django プロジェクトでは 3 つのアルゴリズムがあり、別のプロジェクトでは 5 つある場合があります。

Django パッケージの管理パネルでは、重みやテスト ケースなどのカスタム アルゴリズム コンポーネントを編集できます。

今私の問題は、Djangoビューのパッケージで、Djangoプロジェクトのアルゴリズムにアクセスして表示したいということです。リストとして、選択/編集/削除だけでなく、それらを詳細に表示して編集することもできます。

今、私の問題は、明らかに、Djangoプロジェクトの何かをDjangoパッケージに含めることができないことです。そうしないと、依存関係になります。また、アルゴリズムは特定のプロジェクトごとに異なり、独自のものです。

要するに、問題は、パッケージを何にも依存させることなく、そのプロジェクトで使用されるパッケージによって Django プロジェクトの特定のデータにアクセスする方法です。

4

1 に答える 1

0

OK、さらに調査した結果、これに対する可能な解決策が見つかりました。回答を待っている間、情報提供のためにここに残します。

パッケージ URL をモジュールとしてロードする代わりに、Django プロジェクトの変数をパッケージ URL、つまりビューに渡すカスタム関数を使用します。

したがって、プロジェクト urls.py では、次の代わりに:

url(r'^package/$', include('package.urls'))

私が使う

url(r'^package/$', obtain_package_urls(custom_content))

Get_package_urls() はパッケージ内の関数です。

def obtain_package_urls(custom_content):
    urlpatterns = patterns('',
        url(r'^url1$', view1, {'custom_content': custom_content},
        url(r'^url2$', view2, {'custom_content': custom_content},
    )
    return (urlpatterns, None, None)

目標は、Django の静的 URL ビュー マッピングを含む include 関数の代わりに、ビューに含まれるカスタム コンテンツを含む動的 URL ビュー マッピングを返すこの関数を使用することです。

したがって、私が最終的に行ったアルゴリズムを効果的に使用すると、次のようになります。

#Django project settings.py
obtain_algorithm_list():
    return Algorithm.objects.all()

#Django project urls.py
from project.settings import obtain_algorithm_list

urlpatterns = ...
    ...
    url(r'^package/$', obtain_package_urls(obtain_algorithm_list())
    ...

#In the package urls.py
urlpatterns = ...
    url(r'^view1/$', view1, {'algorithms': algorithms},
    ...

#And then in each package view
def view(request, algorithms=[]):
    ...
    use_for_something(algorithms)
于 2013-03-05T01:03:16.830 に答える