In the Django FAQ, we can read this about views:

>In our interpretation of MVC, the “view” describes the data that gets 
>presented to the user. It’s not necessarily how the data looks, but which data 
>is presented. The view describes which data you see, not how you see it. It’s 
>a subtle distinction.

In my mind, "which data you see" would be equal to a context a view
returns, not the HttpResponse or the template. Why? Because rendering
a template is saying "I have this data and I want it presented the way
this template will present it". If the view is responsible for saying
that, it is at least partly responsible for telling us how we see the
data.

Rather, if a view ONLY returned a dataset, something else would be
responsible for displaying this. In more practical terms, if a view
returns a dataset, instead of a full response, another mechanism would
be wholly in charge of formatting the data. This mechanism may then
choose which template to render, or to not render a template at all,
and just pass the dataset along.

Why is this useful? For the sake of minimizing views, but provide a
rich amount of formats. The format-choice mechanism can investigate
the request (HTTP Requests come with an Accept-header) and see what
format has been requested. Looking at Accept would be the proper way
of doing it, but it might be easier to make URLs like /forums/threads.
(?P<format>html|json|xml)

HTML? Render that template. JSON? Render that template (or just
serialize the dataset). XML? RSS? You get the idea: The formatter
takes the data and tries to present it, making it a bridge between a
view and a template.

Furthermore, the same mechanism could be asked to process an
"internal" request, that is another Python function requesting the
data. Right now, I have a couple of views which return some data. But
I'm also building another view, and I want the data from one of the
first views in this one. I can either duplicate the fetching from the
first one, or I can send an "internal" request and just get the
dataset. I pick WHICH data I want and add some to it.

My current solution:

I've written a very crude decorator to demonstrate/use this in my own
projects, but I'm note sure if posting code looks any good on Google
Groups. Summarized:
My decorated views return their dataset as a dictionary.

The decorator takes two parameters: template and formats. template is
the usual path to a template, but without an extension. formats is a
tuple of formats (('html','json')) which the view is considered able
to render.

Upon calling the view, the decorator intercepts its arguments. It
looks for a format-parameter and an internal-parameter. If internal is
True, it lets the view run and just returns the resulting dictionary
to whatever called it. If not, it checks that format is in formats and
then tries to render_to_response("%s.%s" % (template, format,
returned_dict, RequestContext(request))

As I said above, the mechanism (in my case, a decorator) should
probably try to investigate what the request looks like, rather than
checking for stuff in the URL/other parameters but as I said, it's
crude. It should also return the proper Content-type.

--

Do you think I have a point? Me not being a Django developer (and not
a very seasoned Python user at all), I realize I might have
misunderstood your... philosophy :)
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Django developers" group.
To post to this group, send email to django-developers@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/django-developers?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to