0

我目前正在尝试使用 javascript 来显示一个额外的表单字段,如果选择的产品在检查这一点的方法上返回 true。虽然我为表单选择设置了 onchange 部分,但我正在努力实际访问产品方法。我假设我必须使用我没有经验的 json。我希望执行以下操作,即在 if 语句中使用该方法的返回值。我目前尝试使用的代码是(我意识到它只是显示一个警报 atm,但我的首要任务是让它工作):

function openingCheck(optionValue){
    {% check_opening_date as json %}
    var checkOpeningDateJSON = {{json|safe}};

    if(checkOpeningDateJSON)
        alert(optionValue);

};

哪个用途:

@register.tag(name="check_opening_date")
 def check_opening_date(parser, token): 
"""return whether the product should show the opening date or not"""

product = Product.objects.get(pk=productID)

return serializers.serialize('json',product.show_opening_date())

我遇到的问题是我不确定如何将 optionValue 传递给 check_opening_date 函数以及如何返回 product.show_opening_date() 的值。

任何提示将不胜感激。

4

1 回答 1

0

有两种方法。

  1. 呈现页面时,将show_opening_date()某处的结果与表单选择一起保存。这意味着对于列出的每个产品,您要么在某处创建相应的隐藏输入,要么将结果保存为 select 中的属性或其他内容。选择产品后,您只需使用 javascript 来检查此隐藏输入或属性的值。加载后无需与服务器交互。(总共有一个对服务器的请求)

  2. 或者,您只需展示产品。选择一个时,您可以使用 ajax 联系带有产品 ID 的服务器。服务器运行product.show_opening_date()并返回带有结果的 json。(对服务器有许多请求;初始请求,以及每次用户选择产品时)

你所拥有的没有意义。请记住,模板(以及所有模板变量和模板标签)是在页面呈现时组装的,因此它们没有任何执行 javascript 的概念(或 onchange 事件等)。您似乎对模板标签的概念有些困惑。这些应该用于模板逻辑以显示已在视图中聚合的信息(通常 - 它不是一成不变的)。

于 2012-08-08T12:01:23.927 回答