0

我正在开发一个带有通用组件的网络应用程序,并决定将这些通用组件(一些视图、模板、逻辑)打包在一个 Django 包中。

现在的问题是:我想根据项目从包中访问我的特定 Django 项目的变量。在这种特定情况下:

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

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

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

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

所以,简而言之,问题是如何通过项目使用的包访问 Django 项目的特定数据,而不使包依赖于任何东西。

4

1 回答 1

0

好的,所以经过更多调查后,我找到了一个可能的解决方案。在等待答案时将其留在这里以供参考。

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

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

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

我用

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

其中 gain_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-view 映射的 include 函数,该函数返回一个动态 URL-view 映射以及视图中包含的自定义内容。

因此,就我最终做的算法而言,这是有效的:

#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 回答