Я разрабатываю приложение Django, которое требует загрузки динамических модулей (во время выполнения). Теперь я могу загружать (из браузера клиента на сервер) «плагины» и регистрировать модель плагина в базе данных и т. д. Но мне нужен способ обработки шаблонов URL для каждого плагина. В настоящее время я написал функцию в «ядре» веб-приложения, которая регистрирует модель и (теоретически) добавляет шаблоны URL загруженного плагина в веб-приложение urls.py, включая его. Эта функция:
def register_plugin_model(model,codename):
# Standard syncdb expects models to be in reliable locations,
# so dynamic models need to bypass django.core.management.syncdb.
# On the plus side, this allows individual models to be installed
# without installing the entire project structure.
# On the other hand, this means that things like relationships and
# indexes will have to be handled manually.
# This installs only the basic table definition.
if model is not None:
style = color.no_style()
cursor = connection.cursor()
tables = connection.introspection.table_names()
seen_models = connection.introspection.installed_models(tables)
statements,trsh = connection.creation.sql_create_model(model, style, seen_models)
for sql in statements:
cursor.execute(sql)
# add urlpatterns
from django.conf.urls.defaults import patterns, url,include
from project.plugins.urls import urlpatterns
urlpatterns += patterns(url(r'^' + codename + '/' , include ( 'media.plugins.' + codename + '.urls' )))
Плагины загружаются в «media/tmp» в формате tgz, а затем извлекаются в «media/plugins/», где это кодовое имя плагина, а загруженные пользователем плагины управляются «project.plugins». .
Вся логика плагинов работает нормально, однако, когда я пытаюсь включить загруженный файл плагина urls.py в веб-приложение (project.plugins.urls), это не дает никакого эффекта. Я напечатал значение "project.plugins.urls.urlpatterns", и оно не изменилось после "urlpatterns += pat....".
Есть ли способ сделать то, что мне нужно?
С наилучшими пожеланиями