GorillaPatch
GorillaPatch

Reputation: 5057

How to organize URLs in django for views handling GET data and parsing URL?

I have a view that displays some movie data. I thought that it might be a good idea to have a view handle a an URL like movie-id/1234 to search for movie id 1234. Furthermore I would like to be able to enter the ID into a form and send that to a server and search for it. To do that I created a second entry in the urls.py file shown below.

urlpatterns = patterns('',
    url(r'movie-id/(?P<movie_id>.+?)/$', 'movieMan.views.detailMovie'),
    url(r'movie-id/$', 'movieMan.views.detailMovie', name='movieMan.detailMovie.post'),
)

So if I want to pass data to my view either via a URL or a GET or POST request I have to enter two urls or is there a more elegant way? In the view's code I am then checking if there is any GET data in the incoming request.

To make the second url usable with the template engine, where I wanted to specify the view's url using the {% url movieMan.detailMovie.post %} syntax I had to introduce a name attribute on this url to distinguish between these two.

I am not sure if I am thinking too complicated here. I am now asking myself what is the first url entry good for? Is there a way to get the URL of a movie directly? When do these kinds of URLs come into play and how would they be generated in the template ?

Upvotes: 0

Views: 501

Answers (2)

alex
alex

Reputation: 1229

I don't think there is a more elegant way.

I did almost the same thing:

url( r'^movies/search/((?P<query_string>[^/]+)/)?$', 'mediadb.views.search_movies' ),

The url pattern matches urls with or without a search parameter. In the view-function, you will have to check whether the parameter was defined in the url or in the query string.

Upvotes: 0

beerbajay
beerbajay

Reputation: 20270

Furthermore I would like to be able to enter the ID into a form and send that to a server and search for it.

Is this actually a search? Because if you know the ID, and the ID is a part of the URL, you could just have a textbox where the user can write in the ID, and you do a redirect with javascript to the 'correct' URL. If the ID doesn't exist, the view should return a Http404.

If you mean an actual search, i.e. the user submitting a query string, you'll need some kind of list/result view, in which case you'll be generating all the links to the specific results, which you will be sure are correct.

Upvotes: 2

Related Questions