【问题标题】:Django template variable has wrong value / Javascript in HEAD not executedDjango 模板变量的值错误/HEAD 中的 Javascript 未执行
【发布时间】:2012-03-06 04:08:18
【问题描述】:

我有一个 Django 模板 base.html:

// inside the javascript
var this_page = "{{ this_page }}";

// inside the HTML part
{% ifnotequal this_page "home" %}
...Some HTML...
{% endifnotequal %}

javascript 区域内的部分不正确。实际上,Firebug 在 HTML 选项卡中显示了我:

var this_page = "home";

但如果我查看控制台选项卡中的 GET,Firebug 会显示:

var this_page = "about";

这是正确的,但调试显示“this_page”设置为“home”。 我也试过了:

{% ifnotequal this_page "home" %}
do some javascript
{% endifnotequal %}

但这也不能正常工作。

我做错了什么?

编辑:仅当我通过链接访问此页面时才会出现此问题。如果我直接访问“关于”页面,我没有这个问题。

在 Ubuntu、Firefox 6.0.2、'runserver' 上测试

【问题讨论】:

  • 您是说{{ this_page }} 输出“home”但{% ifequal this_page "home" %}foo{% endifequal %} 不打印foo? html和javascript是否在同一个文件中?您是否 100% 确定将变量传递到这些模板中?
  • @Yuji:是的,javascript 部分和 html 在一个文件中。我发现在“关于”页面上,如果我在 javascript 部分中有 {% ifequal this_page "home" %}foo{% endifequal %},则会打印“foo”(不正确),而在 html 部分中,它不是(正确的)。我认为,这与浏览器有更多关系,因为这没有任何意义。但我不知道。

标签: python django jquery-mobile django-templates


【解决方案1】:

JavaScript 是一种客户端语言。您的模板的 HTML 由服务器端的 python 渲染,因此您无法通过 java 脚本代码更改渲染变量的值。在您的情况下, this_page 是呈现的 html 变量,var this_page = "{{ this_page }}"; 定义了一个单独的 javascript 变量,并且不会更改呈现的 html this_page 变量。所以firebug是正确的。

如果您想动态更改呈现的 HTML,您可以使用 Ajax。

【讨论】:

  • 在服务器端,我将 {"this_page" : "about"} 放入模板标签中,所以无论左侧是什么,右侧都应该是“about”。没有?
  • 谢谢,您的回答正朝着正确的方向发展。问题在于使用 jquery mobile,它没有像我预期的那样重新加载头部。我会给 +1,但我不能。
【解决方案2】:

问题的解决方案(也许并不奇怪)与问题无关。抱歉,我问错了方向。

由于我使用 jquery mobile,它的表现与我预期的不同:正文内容(默认)在页面更改时按 ajax 加载,而头部仅加载一次。

我找到的问题的解决方案here。

【讨论】:

    猜你喜欢
    • 2017-09-18
    • 1970-01-01
    • 2021-06-14
    • 1970-01-01
    • 2011-05-17
    • 2020-09-09
    • 2016-04-22
    • 1970-01-01
    • 2013-05-25
    相关资源
    最近更新 更多