Передача переменной (флага) из urls.py чтобы views.py в джанго

#django #redirect #django-views #django-urls

#django #перенаправление #django-представления #django-URL-адреса

Вопрос:

В настоящее время у меня есть приложение «блог», которое будет отображать сообщения в блогах разных пользователей в зависимости от имени пользователя. Это то, что мой urls.py похоже на то.

 urlpatterns = patterns('blog.views',
              url(r'^(?P<blog_author>[^/] )/$', 'entries',  name='blog'),
              url(r'^(?P<blog_author>[^/] )/(?P<entry_slug>[^/] )/$', 'blog_entry', name='blog_entry'),
          )
  

Таким образом, blog/authorname/ будут перечислены все записи в блоге этого конкретного автора и blog/authorname/foo-post/ будет отображаться конкретное сообщение в блоге. То, что я пытаюсь сделать, это постоянно перенаправлять сообщения в блогах участников alumni на blog/alumni/authorname и blog/alumni/authorname/foo-post/ соответственно. Я добавил поле в свою пользовательскую модель, которое будет указывать, является ли пользователь выпускником или нет.

Функция просмотра в основном одинакова как для обычных пользователей, так и для выпускников. Вот что я пытался сделать до сих пор: внутри функции entries просмотра я добавил несколько строк, которые выполняли бы проверку участника alumni. Если определенный автор блога является выпускником, будет HttpResponsePermanentRedirect blogs/alumni/alumni_author/ и, поскольку часть рендеринга одинакова, вызовите ту же entries функцию просмотра. Итак, по сути, моя entries функция пытается выполнить проверку типов членов, отображая представление как для обычных, так и для выпускников.

Комментарии:

1. Мне кажется, что вам просто нужно настроить URL с url(r'^alumni/(?P<blog_author>[^/] )/$', 'entries', name='blog_alumni'), помощью и, конечно, не выполнять перенаправление.

Ответ №1:

Вы можете отправить флаг из urlconf в представление, используя необязательный третий параметр:

 url(r'^alumni/(?P<blog_author>[^/] )/$', 'entries', {'alumni': True}, name='blog'),
  

Комментарии:

1. Прошу прощения за мой нубизм. Как я получу доступ к этому флагу из моей функции просмотра?

2. Обычным способом — он передается в качестве параметра функции, точно так же, как blog_author .