【问题标题】:How to pass javascript variable to Django template如何将javascript变量传递给Django模板
【发布时间】:2017-07-20 16:29:40
【问题描述】:

这段代码是一个 javascript 变量,它将 url 传递给回调函数,点击地图的某些部分会呈现关联的视图,随后会呈现模板“Country_Details.html”

var var_1 = "{% url 'County_Details' pk=1 %}"

在给定的示例中,我传递了一个参数,即“pk=1”,它可以正常获取与“id”=1 关联的对象。

def County_Details(request,pk):
    C_Details = CountryDiseases.objects.filter(country__pk=pk)
    return render(request, 'DATAPLO/Country_Details.html', {'C_Details': C_Details })

但我有一个 id 列表,并且我想要一个可以根据通过变量(例如“my_id”)的点击动态替换 pk 值的解决方案。

虽然我已经尝试了很多东西,但没有什么对我有用。我在网上找到的一个非常接近的线程如下所示。

Get javascript variable's value in Django url template tag

我已经尝试了所有建议的解决方案,但没有任何效果。

我该如何解决这个问题。

谢谢

【问题讨论】:

  • 为什么不使用django模板标签就做不到呢?类似:var var_1 = "/county/" + js_var?

标签: javascript python django django-forms django-views


【解决方案1】:

关于 django、模板和 js 有几件事需要了解。 1.所有django代码都是服务器端的。它在到达最终用户之前在服务器上进行评估。 2.所有的javascript都是客户端。它在到达用户之后进行评估。 3. Django 模板逻辑可以被认为是 django 代码,因此也是服务器端的(在到达最终用户之前进行评估)。 4. 您可以混合 django 模板标签和 js,但只能在渲染的模板中,而不是单独的 js 文件。如果您这样做,请意识到 django 模板逻辑仅在服务器上是动态的。它本质上充当占位符,持有一个单一的价值,一旦在客户端上就永远不会改变。换句话说,javascript 无法操纵 django 模板标签逻辑。但是 django 模板标签逻辑可以在被服务器渲染时操作一次 javascript 逻辑。

在这种情况下,这可能不一定有用,但它可能有助于理解。

所以试试这个:

在 mytemplate.html 中:

var url_option1 = "{% url 'my_url', pk = django_var_1, somevar = django_var_2, ... %}";
var url_option2 = "{% url 'my_url', pk = " + {{ django_var_1 }} + ", somevar = " + {{ django_var_2 }} + " %}";

我不确定第一个选项在语法上是否有效。如果是这样,请使用它,不要做第二个。否则,我知道第二个将始终在语法上工作,但看起来不那么干净。因此,如果语法有效,请使用第一个。

对于第二个,如果 {{ django_var_? }} 返回一个字符串,您需要在 " + {{ django_var_? }} + " 周围加上单引号,如下所示:

var url_option2 = "{% url 'my_url', pk = '" + {{ django_var_1 }} + "', somevar = '" + {{ django_var_2 }} + "' %}";

【讨论】:

    猜你喜欢
    • 2018-12-03
    • 2020-04-24
    • 2020-10-20
    • 2016-09-26
    • 1970-01-01
    • 2015-04-15
    • 2019-04-03
    • 2011-05-09
    相关资源
    最近更新 更多