【问题标题】:Include Django Project specific objects in Django package在 Django 包中包含 Django 项目特定对象
【发布时间】:2013-02-19 06:20:34
【问题描述】:

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

现在的问题是:我想根据项目从包中访问我的特定 Django 项目的变量。在这个特定的例子中:

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

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

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

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

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

【问题讨论】:

    标签: python django python-module


    【解决方案1】:

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

    我没有将包 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)
    

    我们的目标是使用该函数返回动态 URL-view 映射以及视图中包含的自定义内容,而不是包含 Django 的静态 URL-view 映射的 include 函数。

    因此,就我最终使用的算法而言:

    #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)
    

    【讨论】:

      猜你喜欢
      • 2020-07-04
      • 1970-01-01
      • 1970-01-01
      • 2022-01-02
      • 2021-09-15
      • 2013-06-11
      • 2011-08-18
      • 2011-12-17
      相关资源
      最近更新 更多