我有几乎同一个应用程序的三个实例,我尝试用更可重用的东西替换我的复制粘贴代码。我使用抽象模型解决了模型,如下所示:
# apps.base.myapp.models
class MyAppBase(models.Model):
name = models.CharField(max_length=60)
class Meta:
abstract = True
# apps.site_v1.myapp.models
class MyApp(MyAppBase):
pass
# apps.site_v2.myapp
class MyApp(MyAppBase):
pass
对于 site_v1 和 site_v2 中的应用,我必须添加一个appconfig,因为我无法为两个应用使用相同的名称:
# apps.site_v1.myapp.apps
class CustomAppConfig(AppConfig):
name = 'apps.site_v1.myapp.apps'
label = 'site_v1_myapp'
# apps.site_v2.myapp.apps
class CustomAppConfig(AppConfig):
name = 'apps.site_v2.myapp.apps'
label = 'site_v2_myapp'
我希望在我的两个版本的网站中的 urls.py 和 views.py 中有以下内容(并且如果我愿意,可以更改它们) :
# apps.site_v1.myapp.views and apps.site_v2.myapp.views
from apps.base.myapp.views import *
# apps.site_v1.myapp.urls and apps.site_v2.myapp.urls
from apps.base.myapp.urls import *
我的问题是,我如何动态设置 apps.base.myapp 中的通用 urls.py 和 views.py 支持此配置?
# apps.base.myapp.urls
views = ??? # Import dynamically, depending on whether I'm on site_v1 or site_v2
urlpatterns = patterns('',
url(r'^$', views.MyView.as_view(), name='index'),
)
我在 views.py 上详细说明了一下,而且,由于我在网址中有/ v1 /或/ v2 /,我能够获取是否我是m在视图中使用v1或v2并加载正确的模型。但我无法找到如何在 urls.py 中获取此信息的方法,因此我可以加载正确的模块。
在我的主 urls.py 中我已经指定了版本:
# project.urls
urlpatterns = patterns('',
url(r'^site_v1/', include('urls_site_v1', namespace='site_v1', app_name='cur_site')),
url(r'^site_v2/', include('urls_site_v2', namespace='site_v2', app_name='cur_site')),
)
因此,如果我可以访问使用的命名空间或以某种方式使用哪个应用程序,我认为它可以解决问题。
只有一个应用程序和一些变量定义它不是一个选项,因为我希望能够单独修改它们并将它们放在不同的数据库中。