Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Passing arguments to views in Django from constrained choices

I am looking for the best way to pass either of two arguments to the views from the URL, without allowing any additional arguments.

For example, with the following URLs:

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

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

If it's possible to pass the URL to the views, so that pendingFriends knows which URL it was called from, that would work. However, I can't see a way to do this.

Instead, I could supply the arguments (requests or offers) in the URL, to a single Django view,

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

The argument will tell pendingFriends what to do. However, this leaves open the possibility of other arguments being passed to the URL (besides requests and offers.)

Ideally I'd like the URL dispatcher to stop this happening (via a 404) before the invalid arguments get passed to the views. So my questions are (a) is this the best approach, (b) is there a way to constrain the arguments which are passed to the views in the URL to requests or offers?

Thanks

like image 423
eli Avatar asked Feb 23 '23 21:02

eli


1 Answers

Remember that you have the full power of regexes to match URLs. You simply need to write a regex that accepts only what you want:

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

If you want to list it twice, do it like this:

(r'^friends/(?P<type>requests)', 'app.views.pendingFriends'),
(r'^friends/(?P<type>offers)', 'app.views.pendingFriends'),
like image 156
Ned Batchelder Avatar answered Feb 25 '23 14:02

Ned Batchelder