Thanks, yes this is *exactly* what I'm after.

I'm coming from other web frameworks where there is more "magic" around 
controllers/views so I was unsure about this solution, but in django it 
appears that a view is explicity just a function that transforms a request 
into a response.

Thanks again.

On Wednesday, July 15, 2015 at 1:23:16 AM UTC+10, ke1g wrote:
>
> You will want a routing view, or a fallback cascade.  In either case, make 
> that urlpattern r'^([\w-]+)$'.  You don't need to escape the - because it's 
> the last char in the class.  You don want to restrict the urls to those in 
> which the entire url matches (^ and $), and the parentheses capture the 
> string as a positional argument to the view.  Your view could then call sub 
> views, something like this:
>
>     def router(request, key):
>         try:
>             return model1_view(request, key)
>         except django.http.Http404:
>             pass
> and as many more try blocks as you need.
>
> Don't put the last sub view in a try lock so that if it's not found 
> anywhere, the 404 takes its natural course.
>
> Each view can use the get_object_or_404() shortcut, or whatever floats 
> your boat.  It's just that they should raise Http404, rather than 
> formatting the 404 response themselves and returning it
>
> The sub views can be class based, so long as they raise Http404 for no 
> such key, or be function views
>
> Doing the outer, routing view, as a class based view is probably less 
> clear (less explicit), and is left as an exercise for the student, if you 
> really want it.
>
> On Tue, Jul 14, 2015 at 9:26 AM, Avraham Serour <tov...@gmail.com 
> <javascript:>> wrote:
>
>> What do you mean by flat URL structure?
>>
>> In any case you may have a controller called by the URL dispatcher that 
>> decides which view to use to process the request.
>>
>> No need to complicate on writing you own dispatcher replacement
>>
>> On Tue, Jul 14, 2015, 4:20 PM Mathew Byrne <mat...@jbinteractive.com.au 
>> <javascript:>> wrote:
>>
>>> I have an application that requires a flat URL structure for multiple 
>>> different views.  The single route r"^[\w\-]+" should start by looking at 
>>> slugs for one Model class, and move onto a Category Model class if no match 
>>> is found, then a Vendor model class, and lastly down to the flatpages app.
>>>
>>> I'd like to separate all these models into separate views, but regular 
>>> django urlpatterns wont work here since only the first match is followed.
>>>
>>> What's the best way to implement this requirement?  Is there a way I can 
>>> create my own URL matcher and dispatch to a view based on custom logic?  Is 
>>> there a way to re-dispatch a request after the point at which a match was 
>>> made?
>>>
>>> Thanks,
>>>
>>> Mat
>>>
>>> -- 
>>> You received this message because you are subscribed to the Google 
>>> Groups "Django users" group.
>>> To unsubscribe from this group and stop receiving emails from it, send 
>>> an email to django-users...@googlegroups.com <javascript:>.
>>> To post to this group, send email to django...@googlegroups.com 
>>> <javascript:>.
>>> Visit this group at http://groups.google.com/group/django-users.
>>> To view this discussion on the web visit 
>>> https://groups.google.com/d/msgid/django-users/4124aceb-0572-4ee9-ad11-63eb71f71c01%40googlegroups.com
>>>  
>>> <https://groups.google.com/d/msgid/django-users/4124aceb-0572-4ee9-ad11-63eb71f71c01%40googlegroups.com?utm_medium=email&utm_source=footer>
>>> .
>>> For more options, visit https://groups.google.com/d/optout.
>>>
>>  -- 
>> You received this message because you are subscribed to the Google Groups 
>> "Django users" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to django-users...@googlegroups.com <javascript:>.
>> To post to this group, send email to django...@googlegroups.com 
>> <javascript:>.
>> Visit this group at http://groups.google.com/group/django-users.
>> To view this discussion on the web visit 
>> https://groups.google.com/d/msgid/django-users/CAFWa6tKunbukyag%3DNkO%3D-E2c61vQErnRqjSgXjnuvO4h1MNgWA%40mail.gmail.com
>>  
>> <https://groups.google.com/d/msgid/django-users/CAFWa6tKunbukyag%3DNkO%3D-E2c61vQErnRqjSgXjnuvO4h1MNgWA%40mail.gmail.com?utm_medium=email&utm_source=footer>
>> .
>>
>> For more options, visit https://groups.google.com/d/optout.
>>
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to django-users+unsubscr...@googlegroups.com.
To post to this group, send email to django-users@googlegroups.com.
Visit this group at http://groups.google.com/group/django-users.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-users/4728ce1f-1576-4463-936e-3755188487bd%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to