2013-03-05 109 views
0

我正在开发一个web应用程序与普通的部件,并决定打包在Django包的通用组件(一些看法,模板,逻辑)Django项目的特定对象。包含在Django包

现在的问题是:我想要访问的变量我具体的Django的项目,根据项目,从包中。在这种特定的实例:

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

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

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

现在我的问题是,很明显,我不能包括从包的Django Django的项目的东西,否则会成为依赖。这些算法在每个特定项目中都是不同的和独特的。

因此,简而言之,问题是如何通过该项目所用封装访问Django项目的具体数据,未做包依赖的东西。

回答

0

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

不是加载包的网址,因为我使用经过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)