如何将javascript变量传递给Django模板

时间:2017-07-20 16:29:40

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

这段代码是一个javascript变量,它将url传递给回调函数,点击地图的certian部分呈现关联的视图,然后是模板" 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列表,我想要一个可以根据变量点击动态替换pk值的解决方案,例如" my_id"。

虽然我尝试过很多东西,但没有什么对我有用。我在网上发现的一个非常接近的线程如下。

Get javascript variable's value in Django url template tag

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

我怎么能解决这个问题。

谢谢

1 个答案:

答案 0 :(得分:0)

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

在这种情况下,这可能不是必要的,但它可能对理解有所帮助。

所以试试这个:

在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 }} + "' %}";