【发布时间】:2019-11-13 04:39:26
【问题描述】:
在我的 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 django-template-filters