Передача аргументов в представления в Django из ограниченного выбора - PullRequest
3 голосов
/ 24 сентября 2011

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

Например, со следующими URL-адресами:

(r'^friends/requests', 'app.views.pendingFriends'),

(r'^friends/offers', 'app.views.pendingFriends'),

Если возможно передать URL в представления, чтобы pendingFriends знал, с какого URL он был вызван, это сработает. Однако я не вижу способа сделать это.

Вместо этого я мог бы предоставить аргументы (requests или offers) в URL для одного представления Django,

(r'^friends/(?P<type>\w+', 'app.views.pendingFriends'),

Аргумент скажет pendingFriends, что делать. Однако это оставляет открытой возможность передачи других аргументов в URL (кроме requests и offers.)

В идеале я бы хотел, чтобы диспетчер URL-адресов прекратил это (через 404) до того, как недопустимые аргументы будут переданы в представления. Итак, мои вопросы: (а) это лучший подход, (б) есть ли способ ограничить аргументы, которые передаются представлениям в URL, до requests или offers?

Спасибо

1 Ответ

7 голосов
/ 24 сентября 2011

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

(r'^friends/(?P<type>requests|offers)', 'app.views.pendingFriends'),

Если вы хотите перечислить его дважды, сделайте это так:

(r'^friends/(?P<type>requests)', 'app.views.pendingFriends'),
(r'^friends/(?P<type>offers)', 'app.views.pendingFriends'),
...