在Django包中包含Django Project特定对象

时间:2013-03-05 00:41:07

标签: python django python-module

我正在开发一个包含通用组件的Web应用程序,并决定在Django包中打包这些常用组件(一些视图,模板,逻辑)。

现在的问题是:我想从包中访问我的特定Django项目的变量,具体取决于项目。在这个特定的例子中:

我的Django包有一个管理面板。一个定制的管理面板,允许我管理算法列表。但是,这些算法会改变。在一个特定的Django项目中,我可能有3个算法,在另一个中我可能有5个算法。

Django包中的管理面板允许我编辑自定义算法组件,例如权重,测试用例等。

现在我的问题是,在Django视图中,在包中,我想访问Django项目的算法以显示它们。作为列表,用于选择/编辑/删除,还可以详细查看和编辑它们。

现在我的问题是,显然,我不能在Django包中包含Django项目中的内容,否则它将成为依赖项。并且算法在每个特定项目中都是不同且独特的。

因此,简而言之,问题是如何通过该项目使用的包访问Django项目的特定数据,而不会使包依赖于任何内容。

1 个答案:

答案 0 :(得分:0)

好的,经过一番调查后我发现了一个可能的解决办法。在等待答案的同时将它留在这里以供参考。

我没有将包URL作为模块加载,而是使用自定义函数将Django项目的变量传递给包URL,从而传递视图。

所以在项目urls.py中,而不是:

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

我用

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

其中obtain_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)