【问题标题】:Using {% include 'includes/some.html' %} in django template在 django 模板中使用 {% include 'includes/some.html' %}
【发布时间】:2018-08-19 19:43:54
【问题描述】:

我有一个模板如下:-

<div class= "comment-form m-2">
{% include "includes/comment_reply_form.html" %}</div>

如果用户通过身份验证,则 html 会显示表单。但是,如果用户未登录,我想显示一个登录按钮。我正在通过以下javascript处理相同的事情。

$(".comment-reply-btn").click(function(event){
      event.preventDefault();
      if (user_is_authenticated === false) {
          $(".comment-form").html('{% include "includes/reply.html" %}');
      $(this).parent().next(".comment-reply").fadeToggle();
      }

      else {
        $(this).parent().next(".comment-reply").fadeToggle();
      }

});

但是,它不是在 reply.html 中包含 html,而是在网页中显示 {% include "includes/reply.html" %}。 javascript没有问题,如果我添加

<p> You need to Login </p>

在下一行。它工作正常:-

 $(".comment-form").html('{% include "includes/reply.html" %}');

但由于我的reply.html 中需要更多选项,因此我想将其添加为包含。我尝试在 { 前面使用转义字符“/”,但没有帮助。

【问题讨论】:

  • 那么问题在于:如果{% include ... %} 呈现一个引号 ('),那么字符串就会停止(根据 JavaScript),那么我们就遇到了真正的麻烦。
  • 但它在 html 中显示 {% include "includes/reply.html" %},但 html 没有选择它,因为 django 模板可能是 javascript 将其添加为 "{% include "包括/reply.html" %} "
  • 这个 JavaScript in 是模板,还是“静态”.js 文件。 Django 模板在服务器端呈现,所以在客户端,{% include ... %} 完全没有意义...
  • 它在我的 base.js 文件中。正如我所提到的,如果我在我的 javascript 中用一个简单的段落标记替换 include 语句,它就可以正常工作。
  • 当然可以正常工作,因为如前所述,Django 引擎不会解释 base.jsclient 看到这个{% include %} 标签,因此不会替换它,因为浏览器无法读取 Django 模板语言(即使它可以,它也无法访问模板、文件、模型,视图等)

标签: javascript html django django-templates


【解决方案1】:

不熟悉但试试

<div class= "comment-form m-2">
<script>
document.write('{% include "includes/comment_reply_form.html" %}')
</script>
</div>

【讨论】:

  • 第一个模板工作正常,因为它在 html 中。问题是当我尝试使用 javascript 添加一些其他包含语句时。
  • 也许你不能通过 javascript 动态地做到这一点,尝试一些服务器端命令或者做一些不好的解决方法,比如将它包含在隐藏的 div 元素中,然后取消隐藏它......
【解决方案2】:

不要将 include 中的值放入您的 javascript 函数中,只需将其放入带有 display = none 的 html 中

<div id="comment-reply-form-template">
  {% include "includes/comment_reply_form.html" %}

然后在您的 javascript 中,您可以随时在需要时克隆已呈现的表单...

或者您可以制作一个自定义模板标签,该标签将使用 '' + '' + '' 以 javascript 字符串样式打印 html

或者预先查看新的 es6 模板字符串 https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/template_strings

我认为会像

`{% include "includes/comment_reply_form.html" %}`

使用 ` 字符

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-21
    • 1970-01-01
    • 1970-01-01
    • 2012-09-22
    • 2016-03-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多