The 'media' attribute on forms are actually python proterties

Sent from my iPod; pardon any typos and poor grammar!

On Nov 24, 2009, at 5:02 PM, Todd Blanchard <[email protected]> wrote:

> Thanks, I feel like I'm making progress.
>
> Widgets define media too.  I'm really fuzzy about how widgets get
> loaded and how their media declarations get collected into the media
> object list. (I'm using contrib.gis which has nifty map widgets and
> it "just works" in the admin but now I'm building my own UI).
>
> In fact, I'm pretty fuzzy in general about how code like widgets
> gets "found" and loaded.
>
> -Todd Blanchard
>
>
> On Nov 24, 2009, at 3:52 PM, Tim Valenta wrote:
>
>> Sorry-- I got out of sync with the replies.
>>
>>> Or am I missing something.  Seems like I am getting very much NON-
>>> DRY here.
>>
>> How many pages do you have dozens of forms on?  If ever, I find that
>> I've got a single form on the page.  If you're writing an app complex
>> enough to need such amazingly complicated nested forms.... should you
>> use the admin, and let it do all that for you?
>>
>> We're not really working with specifics here, so I'm unsure of what
>> you're trying to accomplish.
>>
>> How would you propose we get around this problem?  You've got a
>> python
>> list of form objects.  How on earth is Django supposed to know what
>> variable you've got your forms in?  By forcing you to put all your
>> forms in a single variable, it would make Django dictate too strongly
>> "the one and only variable which can hold forms".  That exactly what
>> it's trying not to do.
>>
>> Just set up a template, perhaps "base.html".  Make it something like
>> this:
>>
>> <html>
>> <head>
>>   <title>blah</title>
>>   {% block my_media %}
>>       {{ media }}
>>   {% endblock %}
>> </head>
>> <body>
>>   {% content %}{% endcontent %}
>> </body>
>> </html>
>>
>>
>> Then, in your views, you'll render the actual template you want to
>> use
>> (as in, don't render "base.html", render the one that you'd normally
>> render), but make sure it extends base:
>> {# mytemplate.html #}
>> {% extends "base.html" %}
>>
>> {% block content %}
>>   my content goes here...
>>   <form>
>>   {% for form in forms %}
>>       {{ form.as_p }}
>>   {% endfor %}
>>   </form>
>> {% endblock %}
>>
>>
>> The idea is that the 'base.html' template will *always* try to grab
>> the context variable "media" and render it.  That means that all you
>> ever have to do is make sure that the context variable "media"
>> contains the cumulative media of what you want to include.  Note,
>> though, that when you want to use this "extends" approach, you become
>> required to work in those blocks.  that's why I put a "content" block
>> in the base template, and override it in the extended one.  Stuff
>> outside of blocks in mytemplate.html won't get displayed.  This is a
>> very common approach, though, so don't feel like you're getting
>> cheated.
>>
>> Then, if you ever want to for whatever reason add more media beyond
>> the form media, you can either slap it into the 'media' context var
>> in
>> your view, or you can do that block override I kept using the first
>> examples:
>>
>> {# mytemplate.html #}
>> {% block my_media %}
>>   {{ block.super }}
>>   <script type="text/javascript" src="blahblah/my.js" />
>> {% endblock %}
>>
>> {% block content %}
>>   {# continue as usual #}
>> {% endblock %}
>>
>>
>>
>> I hope I'm not spouting nonsense that you are already familiar with.
>> Feel free to ask anything more, if you've got specifics that you're
>> trying to nail down, design-wise.
>>
>> Tim
>>
>> On Nov 24, 4:36 pm, Todd Blanchard <[email protected]> wrote:
>>> No no no, I really really appreciate the help.
>>>
>>> But I'm definitely beginning to feel like my app is 80% boilerplate.
>>>
>>> On Nov 24, 2009, at 3:35 PM, Tim Valenta wrote:
>>>
>>>
>>>
>>>> PS -- I hope I don't sound like I'm insulting your
>>>> intelligence--- I'm
>>>> not.  I've often felt like there aren't enough policies in Django,
>>>> myself.  But pick your battles.  This is an easy one.  I prefer
>>>> Django
>>>> over Rails, when it comes down to it.  Feel fortunate that Django
>>>> has
>>>> practically the best documentation on the planet.  I hate more open
>>>> source docs, because it was written by a guy who don't know how
>>>> to use
>>>> proper english!
>>>
>>>> I'm just trying to drive home the point that this isn't the worst
>>>> thing that you could be stuck on.
>>>
>>>> Sincerely hoping it helps,
>>>> Tim
>>>
>>>> On Nov 24, 4:28 pm, Tim Valenta <[email protected]> wrote:
>>>>> Sorry it's not working out for you, but I'd disagree about the
>>>>> comparison to X-Windows :)  I'd be defending Django, and not X-
>>>>> windows, when I say that.
>>>
>>>>> I'm serious.  Just add them together.  I'm not sure you're
>>>>> appreciating the slick objects that have been crafted for this
>>>>> very
>>>>> purpose.
>>>
>>>>> Your view:
>>>>>    cumulative_media = form.media for form in forms
>>>>>    return render_to_response('mytemplate.html', {'media':
>>>>> cumulative_media})
>>>
>>>>> Your template:
>>>>>    {% block my_media_block %}
>>>>>        {{ block.super }}
>>>>>        {{ media }}
>>>>>    {% endblock %}
>>>
>>>>> I fail to see what is so hard about this.
>>>
>>>>> Tim
>>>
>>>>> On Nov 24, 4:13 pm, Todd Blanchard <[email protected]> wrote:
>>>
>>>>>> You know what, this is absolutely too much BS.  Why would one
>>>>>> bother to use the media declaration stuff at all if there is no
>>>>>> mechanism to properly consume it (a built in template tag for
>>>>>> instance).
>>>
>>>>>> I think I will just hardcode them in the head in the base
>>>>>> template.  They seldom change and browser caching being what it
>>>>>> is having them never change is just fine.
>>>
>>>>>> After three weeks of seriously trying to get traction with
>>>>>> django, my conclusion is it has all of the elegance of X-
>>>>>> windows.  It can do anything but out of the box it does nothing
>>>>>> except present a zillion confusing parts to the programmer and
>>>>>> it has too many mechanisms but no policies.
>>>
>>>>>> I'm beginning to very much pine for rails.  At least it does
>>>>>> something out of the box.
>>>
>>>>>> Very frustrated today - still haven't got a single record/entry
>>>>>> form working.  Too many little files and indirection to keep it
>>>>>> all straight in my head.
>>>
>>>>>> -Todd Blanchard
>>>
>>>>>> On Nov 24, 2009, at 2:05 PM, Tim Valenta wrote:
>>>
>>>>>>> The idea is along the lines of what you initially guessed.
>>>
>>>>>>> The admin accomplishes the non-duplicate effect in django/
>>>>>>> django/
>>>>>>> contrib/admin/options.py, starting at line 770.  It loops over
>>>>>>> the
>>>>>>> forms and combines the existing media with the media on each
>>>>>>> form
>>>>>>> object.  It ends up using a series of objects to do it,
>>>>>>> including a
>>>>>>> Media class, but it's not doing anything too special.  When an
>>>>>>> item
>>>>>>> gets added, it checks to make sure that the path doesn't
>>>>>>> already exist
>>>>>>> in the list.
>>>
>>>>>>> So, short story: loop over your forms and add the media
>>>>>>> attributes
>>>>>>> together.  The underlying Media class ought to be dropping
>>>>>>> duplicates.
>>>
>>>>>>> Then just save a context variable with the result, and do the
>>>>>>> following in your template:
>>>
>>>>>>> {% block extrahead %} {# or whatever you call your header
>>>>>>> block #}
>>>>>>>   {{ block.super }}
>>>>>>>   {{ cumulative_media }}
>>>>>>> {% endblock %}
>>>
>>>>>>> Tim
>>>
>>>>>>> On Nov 24, 12:30 pm, Todd Blanchard <[email protected]> wrote:
>>>>>>>> What about de-duping?
>>>>>>>> If two forms want the same js file, will it get included twice?
>>>>>>>> It seems like this is the kind of thing that the framework
>>>>>>>> should handle and the current "solution" is kind of half baked.
>>>
>>>>>>>> -Todd
>>>
>>>>>>>> On Nov 23, 2009, at 2:40 PM, Mark (Nosrednakram) wrote:
>>>
>>>>>>>>> Hello,
>>>
>>>>>>>>> I have something like the following in my generic
>>>>>>>>> genericform.html.  I
>>>>>>>>> think this is what you're looking for if not hope you find a
>>>>>>>>> better
>>>>>>>>> answer. The extramedia block is back in my base.html
>>>>>>>>> template and my
>>>>>>>>> form template extends it. I'm not sure if it's in the admin
>>>>>>>>> base.html
>>>>>>>>> but you can take a look at if for there media blocks I
>>>>>>>>> believe are
>>>>>>>>> something like extrastyle etc...
>>>
>>>>>>>>> {% block extramedia %}
>>>>>>>>> {% if forms %}
>>>>>>>>>   {% for form in forms %}
>>>>>>>>>      {{ form.media }}
>>>>>>>>>   {% endfor %}
>>>>>>>>> {% else %}
>>>>>>>>>  {{ form.media }}
>>>>>>>>> {% endif %}
>>>
>>>>>>>>> Mark
>>>
>>>>>>>>> On Nov 23, 1:31 pm, Todd Blanchard <[email protected]> wrote:
>>>>>>>>>> I've read this:
>>>
>>>>>>>>>> http://docs.djangoproject.com/en/dev/topics/forms/media/
>>>
>>>>>>>>>> Nifty.
>>>
>>>>>>>>>> Now, how exactly do I make sure that the media urls get
>>>>>>>>>> spewed properly into the head section of the page?  This is
>>>>>>>>>> apparently omitted everywhere I've looked.  The admin
>>>>>>>>>> template seems to pull it off properly but I cannot figure
>>>>>>>>>> out how.  Seems like I should be able to do something like
>>>
>>>>>>>>>> <html>
>>>>>>>>>> <head>
>>>>>>>>>> {{ media }}
>>>>>>>>>> </head>
>>>
>>>>>>>>>> but I cannot figure out exactly how to properly aggregate
>>>>>>>>>> all the forms' media's and get them spewed into the
>>>>>>>>>> templates properly.
>>>
>>>>>>>>>> -Todd
>>>
>>>>>>>>> --
>>>
>>>>>>>>> You received this message because you are subscribed to the
>>>>>>>>> Google Groups "Django users" group.
>>>>>>>>> To post to this group, send email to [email protected]
>>>>>>>>> .
>>>>>>>>> To unsubscribe from this group, send email to 
>>>>>>>>> [email protected]
>>>>>>>>> .
>>>>>>>>> For more options, visit this group athttp://
>>>>>>>>> groups.google.com/group/django-users?hl=.
>>>
>>>>>>> --
>>>
>>>>>>> You received this message because you are subscribed to the
>>>>>>> Google Groups "Django users" group.
>>>>>>> To post to this group, send email to [email protected]
>>>>>>> .
>>>>>>> To unsubscribe from this group, send email to 
>>>>>>> [email protected]
>>>>>>> .
>>>>>>> For more options, visit this group athttp://groups.google.com/
>>>>>>> group/django-users?hl=en.
>>>
>>>> --
>>>
>>>> You received this message because you are subscribed to the
>>>> Google Groups "Django users" group.
>>>> To post to this group, send email to [email protected].
>>>> To unsubscribe from this group, send email to 
>>>> [email protected]
>>>> .
>>>> For more options, visit this group athttp://groups.google.com/
>>>> group/django-users?hl=en.
>>
>> --
>>
>> You received this message because you are subscribed to the Google
>> Groups "Django users" group.
>> To post to this group, send email to [email protected].
>> To unsubscribe from this group, send email to 
>> [email protected]
>> .
>> For more options, visit this group at 
>> http://groups.google.com/group/django-users?hl=en
>> .
>>
>>
>
> --
>
> You received this message because you are subscribed to the Google
> Groups "Django users" group.
> To post to this group, send email to [email protected].
> To unsubscribe from this group, send email to 
> [email protected]
> .
> For more options, visit this group at 
> http://groups.google.com/group/django-users?hl=en
> .
>
>

--

You received this message because you are subscribed to the Google Groups 
"Django users" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/django-users?hl=en.


Reply via email to