【问题标题】:Django custom template tags in javascriptjavascript中的Django自定义模板标签
【发布时间】:2015-09-03 18:15:43
【问题描述】:

我有一个自定义模板标签,如果作为学生的参数 id 传递,它会返回假设学生的姓名和卷号。

@register.inclusion_tag('snippet/student_name.html')
def st_name_tag(profile, disp_roll=True, disp_name=True):
    #some calculations
    return {'full_name':student.name,
            'roll':student.roll_number,
           }

模板(包含)由一些 Html 文件组成,该文件写在一行中(以避免来自 js 的 unterminated string literal 错误)。

我只是想从 JS 函数内部调用st_name_tag

我的 JS 看起来像:

{% load profile_tag %}
<script type = "text/javascript">   
eventclick : function(st){
     var div = ('<div></div>');
     var st_id = st.id;
     if (st.status == 'pass'){
          div.append('<p>Student Name:{% st_name_tag '+st_id+' %}</p>');
     }
}

到目前为止,我尝试了上述方法,并从 st_id 变量中删除了 +'' 标志。那根本没有帮助我。请帮忙!

【问题讨论】:

  • 你不能那样做。您不能将客户端逻辑与服务器端逻辑混合,因为模板在发生任何事情之前已经在服务器上呈现在 javascript 上。你到底想达到什么目的?
  • 我正在尝试在 javascript 点击事件上加载模板。
  • 你必须使用 ajax 来解决这个问题。 stackoverflow.com/a/28341345/940098
  • 嘿,感谢您提供有关服务器端和客户端逻辑的所有信息。我知道这一点,但从未想过那么远:)。我还有一个问题要问你,因为我仍然坚持这个问题。标签包含一个模板,模板具有一定的格式(布局),在整个项目中统一使用,也需要在这个上下文中使用。我按照您的建议使用了 ajax,并在成功函数中执行了 form.append('&lt;p&gt;Added By:{% profile_name_tag user_id %}&lt;/p&gt;');。但不起作用。
  • 我根据我们的 cmets 发布了一个答案。我建议您提出一个新问题,我很乐意为您提供帮助,目前还很模糊。

标签: javascript django django-templates


【解决方案1】:

您正在尝试根据用户的交互来呈现模板。第一个发生在服务器上(通常称为服务器端),后者发生在用户的浏览器上。

这些发生的顺序是首先在服务器上渲染模板,在浏览器中发送和呈现,然后用户与 js 交互。由于这个事实,正如我在评论中提到的,不可能影响在 javascript 中呈现的模板。

我建议您使用ajax 来完成此操作。每当发生迭代时,您都会异步向服务器发出请求以向您提供新数据。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-20
    • 2021-07-13
    • 2012-03-15
    • 2015-12-17
    • 2015-02-28
    • 2011-03-31
    • 2011-10-05
    相关资源
    最近更新 更多