2014-02-11 4 views
0

У меня есть проблема с маршрутизацией в моем приложении django.Динамические функциональные возможности Django и URL-адрес

Проблема: Существует несколько динамических веб-сайтов, и администратор сайта может создавать страницы со случайными URL-адресами. Например, он может создать страницу новостей с URL-адресом «компания/новости» или «магазин/новости». Или он может создать страницу с формой обратной связи с URL-адресом обратной связи или «пользователем/обратной связью».

Таким образом, Django должен уловить этот запрос и показать соответствующие новости или материалы обратной связи для этих страниц. Как я могу перенаправить запрос пользователя на соответствующее представление в соответствии с запрошенной функцией страницы?

ответ

1

Вы можете создать представление, которое анализирует ваш URL-адрес и выбирает стратегию для разных типов.

# urls.py 
... 
url(r'^dynamic-view/(?P<dynamic_view_url>.*)/$', 'dynamic_view') 


# views.py 
def dynamic_view(request, dynamic_view_url): 
    url_parts = [p for p in dynamic_view_url.split("/") if p] 
    if "feedback" in url_parts: 
     return _view_for_feedback(request, url_parts) 
    elif "news" in url_parts: 
     return _view_for_news(request, url_parts) 
    else: 
     raise Http404 
+1

Спасибо, но я нашел другое решение. Я получаю все URL-адреса страниц из моей базы данных и динамически назначаю правила url в моей конфигурации URL: modules = PageHelpers(). Get_available_modules() urlpatterns = patterns ('', url (r '^ $', 'app.home (''% s/'% mod [' url '], включить ('% s.urls '% mod [' module_char_id '])) для мод в модулях) ) + static (settings.MEDIA_URL, document_root = settings.MEDIA_ROOT) –

+0

Вы перезапускаете django, если база данных изменяется, и вам нужна новая версия urlpatterns? –

+0

Да, при таком подходе вам необходимо перезапустить приложение каждый раз, когда изменяется схема URL в базе данных. На самом деле, я не использую этот подход сейчас, Django - это не динамические URL-адреса. –

Смежные вопросы