javascript - 使用django模板中Javascript变量的值来渲染模板上下文

标签 javascript django

请不要将此问题标记为无效。我在 stackoverflow 中没有找到任何与下面提到的问题相关的问题。

我有一个 django 模板。我将以下上下文传递给它

context = {
'1_title': 'Title 1',
'2_title': 'Title 2',
'3_title': 'Title 3',
'4_title': 'Title 4',
}
return render(request, 'index.html', context)

我有一个 HTML 文件,其中有一个下拉列表。下拉列表具有 1、2、3、4 等值。我已经向它注册了一个 onClick 函数。

我需要实现这个功能。我将在 onClick 函数中获取值。然后我将接收到的值与 _title 连接起来并存储一个 JavaScript 变量。现在我需要使用该 javascript 变量来引用 django 上下文。我无法实现这一目标。我用谷歌搜索并在 stackoverflow 中进行了广泛的搜索。似乎没有人回答我的问题。

JavaScript 函数如下所示:

function getContextValue(value) {
var key = value + '_title'; 
return {{ key }}
}

如果我在下拉列表中选择 1,则上述函数的键将为 1_title。我需要从上下文中返回 1_title 值,即标题 1。

对我来说它不起作用并且仅返回 1_title 。我什至尝试过 return {{ 'key' }} 。在这里它返回键。

Stackoverflow 社区请善待。这对你来说可能是一个简单的问题,但对我来说却不是。

最佳答案

如果你想访问 JS 中的上下文信息,你需要以某种方式将其传递给 JS。

将您的上下文更改为类似这样的内容,以便在模板中更轻松地访问。

context = {}
context['data_for_select'] = {
'1_title': 'Title 1',
'2_title': 'Title 2',
'3_title': 'Title 3',
'4_title': 'Title 4',
}
return render(request, 'index.html', context)

我假设您的模板中有类似的内容:

<select name="dropdown">
  {% for key, title in data_for_select.items %}
    <option value="{{key}}">{{title}}</option>
  {% endfor %}
</select>

您现在可以在 DOM 中的某个位置为您的 JS 方法呈现上下文数据。 Django 提供了一个方便的模板过滤器,名为 json_script https://docs.djangoproject.com/en/3.0/ref/templates/builtins/#json-script

{{ data_for_select|json_script:"select-data" }}

你可以在 JS 中使用它,例如:

var data = JSON.parse(document.getElementById('select-data').textContent);

这样您就可以将模板上下文数据公开给 JS。

关于javascript - 使用django模板中Javascript变量的值来渲染模板上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60226752/

相关文章:

javascript - 需要帮助让 jspdf 将 html 渲染为 PDF

javascript - 对 JavaScript 中的对象集合中的列求和

python:压缩csv缓冲区

python - 使用查询集从 Django 获取百万记录很慢

javascript 合并 switch 语句

javascript this.value 不起作用?

javascript - 需要帮助使用 jquery 从 scrollTop 获取最后一页

python - Django:将当前用户指定为评论模型的外键

python - Django: django.db.utils.InternalError: (1046, u'未选择数据库')

python - date_hierarchy 中的 Django Admin NonExistentTimeError