所以,我有索引模板,在那里我有一个表使用Django模板语言来创建一个表(使用for)。
如何使用AJAX将相同的表(即使使用Django模板代码)传递给索引模板?我已经添加了AJAX部分并且它可以工作,但是DJango代码没有被解释而且表格没有构建。
基本上,我想:
{% for item in data %}
这样的Django代码。 例如:
从视图:
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 %}
答案 0 :(得分:4)
问题是这段代码:
def getDetails(request):
var = "{% if 10 > 5 %}<h1>TRUE</h1>{% endif %}"
return HttpResponse(
json.dumps(var),
content_type="application/json"
)
字面上只是将该模板代码放入一个字符串中并将其作为JSON对象发送。模板代码在任何时候都不会转换为HTML字符串。
从您的评论中,您暗示服务器不解释模板代码,但这不正确! Django的默认视图肯定会参与进来。
您可以使用Template类自行执行此解释。
请尝试以下代码:
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,以编程方式演示使用模板,以及使用Context对象提供其他信息。
也许更好的选择是将模板代码留在某处的部分模板文件中。例如,假设您已创建包含以下模板代码的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
加载模板代码,并使用提供的dict动态创建上下文。在这种情况下,Context中的items
条目设置为一个数组,以便{% for %}
标记可以遍历它。