gpt4 book ai didi

javascript - Django 模板标签在 javascript 函数中不会被多次调用

转载 作者:行者123 更新时间:2023-12-01 00:52:42 27 4
gpt4 key购买 nike

在我的 django 应用程序中,我创建了一个模板标记函数,该函数生成一个随机数,我将其作为随机 ID 分配给以编程方式生成的元素。

 import os
import random
from django import template

register = template.Library()

@register.tag(name="randomgen")
def randomgen(parser, token):
items = []
bits = token.split_contents()
for item in bits:
items.append(item)
return RandomgenNode(items[1:])

class RandomgenNode(template.Node):
def __init__(self, items):
self.items = []
for item in items:
self.items.append(item)

def render(self, context):
arg1 = self.items[0]
arg2 = self.items[1]
if "hash" in self.items:
result = os.urandom(16).encode('hex')
elif "float" in self.items:
result = random.uniform(int(arg1), int(arg2))
elif not self.items:
result = random.random()
else:
result = random.randint(int(arg1), int(arg2))
return result

在我的html模板中,我使用了load标签来导入模板标签.py文件:

{% load custom_tag %}

单击特定按钮时,randomgen() 函数仅被调用一次:

$(document).on("click", ".add_div_btn", function() {
let random_id = "{% randomgen 100 1000 %}";
<!-- will generate a random number between 10 and 100 -->
console.log("random id: ", random_id);
});

但是,在第一个按钮之后单击的每个按钮都会生成相同的数字。

在检查控制台日志时,我发现 custom_tag.py 文件中的 randomgen() 函数仅被调用一次。

我不确定如何在 javascript 中对 django 模板标签函数进行正确的调用。

最佳答案

JavaScript 在前端运行,Django 模板标签在服务器上运行。

模板中的 JavaScript 最终被渲染为(例如)

$(document).on("click", ".add_div_btn", function() {
let random_id = "477";
<!-- will generate a random number between 10 and 100 -->
console.log("random id: ", random_id);
});

所以当然它总是会打印相同的 ID。

如果您确实、确实需要在服务器端生成随机 ID,则需要对服务器上的 API 端点进行 AJAX/fetch 调用...但您真正可能会做什么想要的是

$(document).on("click", ".add_div_btn", function() {
let random_id = Math.floor(100 + Math.random() * (1000 - 100));
// will generate a random number between 10 and 1000
console.log("random id: ", random_id);
});

并且根本没有自定义模板标签。

关于javascript - Django 模板标签在 javascript 函数中不会被多次调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56854031/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com