Можно ли направить к определенному представлению на основе переданных переменных URL? - PullRequest
0 голосов
/ 13 декабря 2010

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

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

Модули в основном разные приложения.Один из модулей представляет собой список задач, а другой - список мультимедиа и т. Д. Поскольку у пользователя может быть несколько модулей задач или несколько модулей мультимедиа, каждый со своим собственным портом, мне нужен способ маршрутизации к задаче или представлению мультимедиа в зависимости отURL:

Например:

http://127.0.0.1:8000/james-morris/wedding/ --- это перейдет к профилю 'james-morris' и модулю 'wedding', который оказываетсясписок задач и нужно перейти к представлению задач

http://127.0.0.1:8000/james-morris/icons/ --- это перейдет к профилю 'james-morris' и модулю 'icons', который является медиасписок и нужно перейти к представлению мультимедиа

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

Ответы [ 3 ]

2 голосов
/ 13 декабря 2010

Возможно, я ошибаюсь, но я верю, что нечто подобное уже сделало бы это.

def redirect(request, username, module):
    '''do some stuff here...'''
    if username.has_icons():
        return show_icon(request, username)
    #elif ... something else...

urlpatterns = patterns('',
    (r'^(?P<username>\w+)/(?P<module>\w+)/$', redirect),
)
1 голос
/ 13 декабря 2010

Можно ли направить к определенному представлению на основе переданных переменных URL?
Самым чистым способом выполнения маршрутизации было бы соблюдение основного правила REST - один URL на ресурс. Таким образом, лучшее, что можно сделать, это получить доступ к представлению на основе URL-адреса, а затем создать блок if..elif..else .. , чтобы проверить наличие различных переменных и выполнить маршрутизацию в соответствии с различными взглядами.

Что касается упомянутых вами примеров, Django должен направить вас к различным представлениям, если вы не нацелены на одно и то же представление в своем urls.py

0 голосов
/ 13 декабря 2010

В качестве варианта решения Сидхарта Шармы, если вам нужно проверить права доступа, тогда другой вариант - это приложение, специально предназначенное для изменения маршрута. Представление в этом приложении затем выполняет HttpResponseRedirect для URL, определенного для приложения, которое вы хотите.

urlpatterns = patterns('',
    (r'^(?P<username>\w+)/?P<option>/$', 'reroute.views.direct'),
    (r'^(?P<username>\w+)/wedding/$', 'wedding.views.tasks'),
    (r'^(?P<username>\w+)/icons/$', 'icons.views.media'),
)

def direct(request, username, option):

   if has_condition_for_wedding:
       HttpResponseRedirect('/username/wedding/')
   else:
       HttpResponseRedirect('/username/icons/')
...