python - Django 1.9.3 - 如何将 HTML 模板传递给索引模板

标签 python ajax django templates

因此,我有索引模板,其中有一个使用 Django 模板语言创建表(使用 for)的表。

如何使用 AJAX 将同一个表(即使使用 Django 模板代码)传递给索引模板?我已经添加了 AJAX 部分并且它可以工作,但是没有解释 DJango 代码并且没有构建表格。

基本上,我想:

  • 在"template"中分离各个 DOM 组件,因此我可以根据需要通过 AJAX 推送到主(索引)模板。请记住,这些"template"应包含 Django 代码,如 {% for item in data %}

例如:

从 View :

def getDetails(request):
 var = "{% if 10 > 5 %}<h1>TRUE</h1>{% endif %}"
 return HttpResponse(
            json.dumps(var),
            content_type="application/json"
        )

index.html:

function getDetails() {
    $.ajax({
        url : "getDetails/",
        type : "POST",
        data : { getDetails : $('#postValue').val() },

        success : function(json) {
            $('#postValue').val('');
            $("#tableDetails").html(json)

    <div id="tableDetails"></div>

浏览器显示的内容:

{% if 10 > 5 %}
TRUE
{% endif %}

最佳答案

问题是这段代码:

def getDetails(request):
  var = "{% if 10 > 5 %}<h1>TRUE</h1>{% endif %}"
  return HttpResponse(
    json.dumps(var),
    content_type="application/json"
  )

实际上只是将该模板代码放入一个字符串中并将其作为 JSON 对象发送。模板代码绝不会转换为 HTML 字符串。

根据您的评论,您暗示服务器不解释模板代码,但这是不正确的! Django 的默认 View 肯​​定会涉及。

您可以使用模板类自己进行这种解释。

试试下面的代码:

from django.template import Context, Template
template = Template("{% if 10 > 5 %}<h1>{{ value }}</h1>{% endif %}")

def getDetails(request):
  context = Context({"value": "TRUE"})
  output = template.render(context)
  return HttpResponse(
    json.dumps(output),
    content_type="application/json"
  )

以上例子,改编自the Django 1.9 documentation ,以编程方式演示如何使用模板,以及如何使用上下文对象提供附加信息。


也许更好的选择是将您的模板代码留在某个部分模板文件中。例如,假设您创建了包含以下模板代码的 table.html:

<table>
{% for item in items %}
  <tr><td>{{ item }}</td></tr>
{% endfor %}
</table>

然后你可以按如下方式加载和渲染它:

from django.template.loader import render_to_string

def getDetails(request):
  table_rows = ['item 1', 'item 2', 'item 3']
  output = render_to_string("table.html", {"items": table_rows})
  return HttpResponse(
    json.dumps(output),
    content_type="application/json"
  )

调用 render_to_string 将从 table.html 加载模板代码,并使用提供的字典动态创建上下文。在这种情况下,上下文中的 items 条目设置为一个数组,以便 {% for %} 标记可以循环遍历它。

关于python - Django 1.9.3 - 如何将 HTML 模板传递给索引模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35764108/

相关文章:

javascript - .click 函数中的 $.get

python - Django 将主服务器与 mysql db 一起切换到辅助服务器

python - 有没有办法在 python 脚本中执行 arp -a cmd 命令?

python - pandas:计算 Blackman 窗口的最大值:缺少函数 pandas.core.window.Window.[max,apply]

jquery - 使用jquery ajax时显示 "loading"的最简单方法?

javascript - Ajax 加载淡入

python - 如何使用python读写文件?

django - 如何使用 Postman 使用参数命中 Django api?

Python从列表创建列表的子列表

python - Celery 后台任务出现 "Working outside of request context"错误