问题
I am creating a django-based site that will serve flash apps that occasionally access data via pyamf. I need to be able to easily test the flash in the context of the django framework, i.e. with all the login cookies and everything available, so that when I make a pyamf call, it has all the user context there. And I need to be able to test and release both the swf's and the wrapper html's in a sane way. However:
- The html templates in flex are already templates, so if I put template code in there for django, it gets scraped out before the flashapp.html is created.
- The html's and swf's automatically get released to the same directory, but I want them to go to different directories because the swf's shouldn't be served by django and the html's should be in an area in control of django.
This leads me to believe, at first glance, that I need:
- A way of having the html and swf files be released to different locations. (I don't know how to do this.)
- A way of releasing the html's as stubs (no html/body tag) so that I can include them from another location in django. (I guess just strip what I don't want from the index.template.html?)
- Then I can point flex to go to the django site that in turn includes the generated flashapp.html that in turn references the swf, and it should all work. (By feeding that alternate html to the run/debug settings, I assume.)
So my question comes down to:
- Is the above the best way of doing this, or is this even the right direction?
- If so, how do I release the html and swf to different directories? (For debug and release mode, if there are two different methods.)
- If not, what is proper?
And if there are any other general bits of advice for me on this topic, please feel free to share. :-)
回答1:
Finally figured this out myself. A combination of this and django get-parameters works. The general take-away:
- You can put
{% tags %}
and{{ variables }}
inindex.template.html
without worry, as there is no way to customize the currently-existing macros there like${title}
- If you make a
foo.template.html
andfoo-debug.template.html
in thehtml-template
directory of your project, then the former will overrideindex.template.html
for release builds, and the latter for debug builds (note that the result will be foo-debug.html instead of foo.html though.) - You can pass the name of the SWF in a parameter to django, and have it fill in the directory for you
foo-debug.template.html
<object ...
<param name="movie" value="{{ bin_debug_url }}/${swf}.swf" ...
djangoflash.html
{% block content %}
{% include flash_template %}
{% endblock %}
views.py
def djangoflashview( request, **kwargs ):
if not kwargs.has_key('extra_context'):
kwargs['extra_context'] = {}
if request.GET.has_key('name'):
debug = "-debug" if request.GET.has_key('debug') else ""
bin_debug_dir = '/dir-to-bin-debug/'
bin_debug_url = 'url-to-bin-debug'
name = bin_debug_dir + request.GET['name'] + debug + '.html'
kwargs['extra_context']['flash_template'] = name
kwargs['extra_context']['bin_debug_url' ] = bin_debug_url
return direct_to_template( request, **kwargs )
urls.py
url( r'^djangoflash/', 'views.djangoflashview',
{ 'template': 'djangoflash.html' }
foo.mxml's run-debug target:
/url-to-django/djangoflash/?name=foo
When you debug foo.mxml, flex:
- Adds
&debug=true
to the url - Brings up a browser to
/url-to-djangoflash/djangoflash/?name=foo&debug=true
- Which picks
djangoflash/
inurls.py
- Which passes the request to
djangoflashview
and{'name':'foo','debug':'true'}
torequest.GET
inviews.py
- Which figures out the name and location of the
foo-debug.html
location, passing it to theflash_template
context variable - And the url of the swf to the
bin_debug_url
context variable - And loads up the direct template
djangoflash.html
- Which, in
djangoflash.html
, includes thefoo-debug.html
wrapper for flash using theflash_template
context variable - Which, in turn fills in the
bin_debug_url
context variable to point the foo.swf reference correctly to the thing you just compiled
Whew. :-P
来源:https://stackoverflow.com/questions/3525820/flex-4-django-testing-and-release-options