Изменение шаблонов URL-адресов во время выполнения в Django

Я разрабатываю приложение 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....".

Есть ли способ сделать то, что мне нужно?

С наилучшими пожеланиями

5
задан user1302007 29 March 2012 в 22:36
поделиться