因此,我有索引模板,其中有一个使用 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/