【问题标题】:Django function call from the template? (should be easy)来自模板的 Django 函数调用? (应该很容易)
【发布时间】:2011-04-15 07:07:54
【问题描述】:

我确定我在这里遗漏了一些基本的东西,但我已经花了几个小时试图解决这个问题。我对 Django 很陌生,所以请原谅我:

如何从模板调用方法?

具体来说,我想加载一个自动播放和元素的页面,然后让它加载/播放另一个具有不同文件的页面。 (通过 python 脚本选择。)

我需要将其定义为自定义标签吗?我在这里缺少什么概念?

非常感谢大家! 罗兰

【问题讨论】:

  • 我想你可能想为此使用 JavaScript。

标签: javascript django html html5-audio


【解决方案1】:

是的,您不能在模板中调用函数(带参数)。这就是templatetags 的用途。

您当然可以将swap the template engine 换成更宽松的,比如说Jinja2。但我猜这个解决方案对于你有限的任务来说太复杂了。

如果您事先知道您的播放列表,您可以在视图中构建它并将其传递给您的模板。

但使用 python 播放媒体并进行重定向可能不是一个好主意,如果可能的话以一种明智的方式。

正如 DTing 在他的评论中提到的,这听起来像是 Javascript/JQuery 的典型用例。 那里有很多 JQuery 插件。找到一个适合您的目的应该不会太难:例如看看jPlayer

如果您想亲自动手,请查看这篇文章:Building a Custom HTML5 Audio Player with jQuery

【讨论】:

  • 感谢您的建议 - 但我现在意识到我未能完全解释自己。我想让
  • ...目前,我将其称为“audioHasFinishedPlaying();” js函数,运行良好。问题是,我无法弄清楚该功能之后应该做什么。它应该调用自定义模板标签吗?如果是这样,自定义标签应该如何替换 src="" 字段?
  • 仍然不确定是否需要模板标签。正如我所说,您不能通过呈现页面的视图传递可能的曲调列表吗?从那里你应该能够使用 js 做所有事情。 (尽管您当然可以通过 Ajax-Calls 加载动态生成的播放列表)请参阅此答案以获取如何控制播放器的 src 的解决方案:stackoverflow.com/questions/2551859/… 唯一的区别是您必须从列表中获取下一首曲子/数组。
【解决方案2】:

我认为您可能对 Django 中的模板如何工作感到有些困惑。模板负责在服务器上生成字符串。这个字符串充满了 HTML 标记。模板标签用于根据服务器数据呈现部分字符串。

一旦构造了这个字符串,它就会通过网络服务器发送到客户端。请记住,这只是一个字符串。

从现在开始,任何需要执行的代码都必须是 javascript。您的示例是指等待文件在客户端上完成播放 - 因此客户端(javascript)负责等待该文件完成并开始一个新文件。如果不向服务器发出另一个 HTTP 请求,则不能从客户端调用 python 代码。模板标签不遍历 HTTP 到客户端。它们只是帮助服务器构造发送的字符串的一种方式。

【讨论】:

  • Dajax 之类的东西能解决问题吗? dajaxproject.com(我对 Web 开发还很陌生——只是想确定我正在尝试学习正确的东西……)谢谢!
  • @Irog,老实说,我以前没有使用过 dajax,所以我不知道。您想要做的是有一个 django 视图,它以 html 或 json 形式返回您的数据表示,使用 jquery.get() (AJAX) 从 javascript 调用该视图,并使用该 http 请求的结果来执行您的客户端边处理。或许可以提出一个新问题以获取有关如何执行此操作的建议。
  • 非常感谢!我认为 Dajax 正是这样做的。 (虽然我可能错了..需要做更多的学习..)非常感谢!
猜你喜欢
  • 2012-02-03
  • 2011-01-03
  • 2020-09-29
  • 1970-01-01
  • 1970-01-01
  • 2015-05-09
  • 1970-01-01
  • 2014-08-18
  • 2011-01-08
相关资源
最近更新 更多