我正在开发一个包含通用组件的Web应用程序,并决定在Django包中打包这些常用组件(一些视图,模板,逻辑)。
现在的问题是:我想从包中访问我的特定Django项目的变量,具体取决于项目。在这个特定的例子中:
我的Django包有一个管理面板。一个定制的管理面板,允许我管理算法列表。但是,这些算法会改变。在一个特定的Django项目中,我可能有3个算法,在另一个中我可能有5个算法。
Django包中的管理面板允许我编辑自定义算法组件,例如权重,测试用例等。
现在我的问题是,在Django视图中,在包中,我想访问Django项目的算法以显示它们。作为列表,用于选择/编辑/删除,还可以详细查看和编辑它们。
现在我的问题是,显然,我不能在Django包中包含Django项目中的内容,否则它将成为依赖项。并且算法在每个特定项目中都是不同且独特的。
因此,简而言之,问题是如何通过该项目使用的包访问Django项目的特定数据,而不会使包依赖于任何内容。
答案 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)