首先,我对Django比较陌生,所以请原谅我,如果我有一些基本的误解。 我正在寻找解析一些Django模板标签,这些标签是作为Django渲染的一部分导入的。我看到的最终问题是正确调用并显示HTML/JS部分,但最后一个Django标记在页面上呈现为纯文本。我意识到这是因为我在一步之前渲染视图太早,但我不知道如何正确地执行此操作。Django 1.6 - 导入/解析视图后的模板标签
这里是基本的调用堆栈(简化):
模板1
{% extends base.html %}
{% block main_content %}
{{ block.super }}
<div id="col1" class="chart-col" style="float: left; width: 33%;">
{% block col1 %}
{% endblock col1%}
{% endblock main_content %}
模板2:产生所需的Django/HTML用于在模板2上述数据列表
{% extends template1.html %}
{% block main_content %}
{% for DATA in DATALIST %}
{{ DATA|safe }}
{% endfor %}
{% endblock main_content %}
Python代码:
def chartdisplay(block_var, othervars):
text = "{% block block_var %} \n {{ block.super }} \n"
text += "<html to generate data display goes here>"
text += "{% endblock block_var %}
return text
上述蟒蛇被传递给Django的View.py:
def dataview(request):
datapull = model.object.filter(**kwargs) #generic data pull
#date-time handler
dthandler = lambda obj: (
obj.isoformat()
if isinstance(obj, datetime.datetime)
or isinstance(obj, datetime.date)
else obj)
data = {'data': datapull}
chart_html = [
chartdisplay(block_var="col1", other_unique_vars),
chartdisplay(block_var="col2", other_unique_vars),
chartdisplay(block_var="col2", other_unique_vars),
chartdisplay(block_var="col3", other_unique_vars)
]
context = {'data', jsondump(data, default=dthanlder), 'charts': charts_html)
return render(request, 'path/to/template2.html', context)
现在,主要的问题是显示在显示HTML和JS罚款生成的HTML,但暴露出来的文字Django模板标签和不会将chartdisplay引导至所需的div。例如。 template2.html被视为:
{% block col1 %} {{ block.super }}
<html/D3 chart is displayed fine>
{% endblock col1 %}
{% block col2 %} {{ block.super }}
<html/D3 chart is displayed fine>
{% endblock col2 %}
{% block col2 %} {{ block.super }}
<html/D3 chart is displayed fine>
{% endblock col2 %}
{% block col3 %} {{ block.super }}
<html/D3 chart is displayed fine>
{% endblock col3 %}
我已经尝试了一些不同的创可贴修复,但我宁愿只知道如何正确地做到这一点。我试过的一件事,但可能误解是,在返回渲染步骤之前:
def dataview(request):
...
rendered = render_to_string('path/to/template12.html', context, context_instance=RequestContext(request))
return render(request, 'path/to/template2.html'/, rendered)
感谢您的帮助。请让我知道是否需要澄清!
这正是我希望找到的,我正在使用渲染不正确/不必要的。现在使用这种方法,它的工作很好。万分感谢! 对于任何想知道的人来说,我的原始代码在render_to_string中多次调用相同的块ID,所以我试图找出正确的方法来处理它(因为您只能调用一次唯一的块)。但这是一个单独的问题。 – robeot 2015-02-18 02:20:14