Flex 4 + Django:测试和发布选项

时间:2010-08-19 20:13:35

标签: django flex release-management pyamf

我正在创建一个基于django的网站,该网站将提供偶尔通过pyamf访问数据的Flash应用。我需要能够在django框架的上下文中轻松测试flash,即使用所有登录cookie和所有可用的内容,这样当我进行pyamf调用时,它具有所有用户上下文。我需要能够以一种理智的方式测试释放swf和包装器html。但是:

  1. flex中的html模板已经是模板了,所以如果我把模板代码放在那里用于django,它会在创建flashapp.html之前被删除。
  2. html和swf会自动发布到同一个目录,但是我希望它们转到不同的目录,因为django不应该为swf提供服务,并且html应该在django的控制范围内。
  3. 乍一看,这让我相信我需要:

    1. 将html和swf文件发布到不同位置的方法。 (我不知道该怎么做。)
    2. 一种释放html作为存根(没有html / body标签)的方法,以便我可以从django中的另一个位置包含它们。 (我想从index.template.html中删除我不想要的东西?)
    3. 然后我可以指向flex转到django站点,而django站点又包含生成的flashapp.html,它反过来引用swf,它应该全部工作。 (通过将备用html提供给运行/调试设置,我假设。)
    4. 所以我的问题归结为:

      1. 以上是最好的方法,还是这个方向正确?
      2. 如果是这样,我如何将html和swf发布到不同的目录? (对于调试和发布模式,如果有两种不同的方法。)
      3. 如果没有,那是什么?
      4. 如果在这个主题上有任何其他一般建议,请随时分享。 : - )

1 个答案:

答案 0 :(得分:1)

最后我自己想出来了。 thisdjango get-parameters的组合有效。一般外卖:

  1. 您可以毫无顾虑地将{% tags %}{{ variables }}放入index.template.html,因为无法自定义当前存在的宏${title}
  2. 如果在项目的foo.template.html目录中创建foo-debug.template.htmlhtml-template,那么前者将覆盖index.template.html用于发布版本,后者用于调试版本(请注意,结果将是foo-debug.html而不是foo.html。)
  3. 您可以将参数中的SWF名称传递给django,并让它为您填写目录
  4. 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的运行调试目标:

    /url-to-django/djangoflash/?name=foo
    

    调试foo.mxml时,flex:

    1. &debug=true添加到网址
    2. 将浏览器设置为/url-to-djangoflash/djangoflash/?name=foo&debug=true
    3. 选择djangoflash/
    4. 中的urls.py
    5. djangoflashview
    6. 中将请求传递给{'name':'foo','debug':'true'}request.GETviews.py
    7. 其中列出了foo-debug.html位置的名称和位置,并将其传递给flash_template上下文变量
    8. swf的url到bin_debug_url上下文变量
    9. 并加载直接模板djangoflash.html
    10. 其中,在djangoflash.html中,使用foo-debug.html上下文变量包含flash_template Flash包装器
    11. 反过来填充bin_debug_url上下文变量,将foo.swf引用正确指向刚编译的东西
    12. 呼。 :-P