Django - Url到动态模型加载

时间:2015-07-17 11:01:56

标签: python django

所以我试图动态加载模型:

urls.py

url(r'^list_view/([\w-]+)$', Generic_list.as_view()),

以下是 views.py 中的Generic_list类:

class Generic_list(ListView):
    import importlib
    module_name = 'models'
    class_name = ?
    module = __import__(module_name, globals(), locals(), class_name)
    model = getattr(module, class_name)
    template_name = 'django_test/generic_list.html'

关于安全性,稍后我将只允许来自白名单的课程。

那么,为了从网址获取类名,我可以用什么代替问号?

2 个答案:

答案 0 :(得分:1)

如果您想动态加载模型,可以执行以下操作:

property

More information关于file(GLOB XIB_FILES *.xib) set_source_files_properties(${XIB_FILES} PROPERTIES MACOSX_PACKAGE_LOCATION Resources) 。基本上,它会将此方法理解为类的属性。不必在类级别定义此属性(意味着在django导入文件时将对代码进行评估),而是使其看起来像是一个属性,但它就像一个方法,允许您添加业务逻辑。

答案 1 :(得分:1)

您可以尝试使用property装饰器和get_model方法:

from django.views.generic import ListView
from django.apps import apps


class GenericList(ListView):

    @property
    def model(self):
        # Obtain model name here and pass it to `get_model` below.
        return apps.get_model(app_label='app_label', model_name='model_name')

另外,请考虑阅读PEP 0008命名约定。