我一直在寻找这个,我没有找到任何解决方案。我根据下一句话用Django渲染:render(request,url,context)。这是我的问题:
如果我在模板中手动编写渲染的上下文:
手动模板
<p>Data starting...</p> <ul> <li>Data1</li> <li>Data2</li> <li>Data3</li> </ul>
网页看起来很好,每个数据都按我的要求显示,因为很明显,渲染之前和之后的输出是:
<p>Data starting...</p>
<ul>
<li>Data1</li>
<li>Data2</li>
<li>Data3</li>
</ul>
但是当我编写动态模板来检索动态数据时,请根据下一个模板的代码:
动态模板
<p>Data starting...</p> <ul> {% for vdom in ioDict %} <li>{{ vdom }}</li> {% endfor %} </ul>
渲染前的输出类似于手动示例:
<p>Data starting...</p>
<ul>
<li>Data1</li>
<li>Data2</li>
<li>Data3</li>
</ul>
但是渲染后的输出如下:
<p>Data starting...</p>
<ul>
</ul>
ioDict是这样的字典:{'Data1':{...},'Data2':{},'Data3':{...}}
有人可以帮助我吗?我真的迷失了。
注意:我一直在我的proyect的其他模板中使用循环,并且没有问题
- UPDATE - 我有两个模板:第一个是使用ioDict的数据渲染一个小的html块,第二个是使用我描述的小模板渲染完整的网页模板。
首先渲染,无论是手动还是动态,都具有相同的输出(正确的输出)。但是,如果我在第二个渲染操作中通过'context'参数传递它,则动态模板构建的输出会给出一个不正确的输出。
所以我不知道为什么动态模板(它提供与手动相同的输出)在第二次渲染操作中产生错误的输出。
查看:
def loadSubModule(request):
...
logMsg = "Rendering 1st template"
context = getContext(modName, modVersion, subMod, request,
assetId=assetId, userProject=currentProject,
date=date, quantifier=1, mN=modName,
extraArgs=extraArgs, req=request)
url = ....
logMsg = "Rendering 2st template"
return render(request, url, context)
else:
return HttpResponse()
else:
raise Http404(_('This URL is only available for AJAX requests')
上下文:返回第一个渲染
我描述的问题是在返回渲染中。
getContext功能:
def getIdsContext(**kwargs):
try:
# Data.
data = ... //OPEN MONGODB CONNECTION TO GET DATA
ioDict = ... //GETTING DATA
# HTML Individual Renders.
path = ...
antivirusHtml = render(kwargs['req'], path + 'ids-antivirus.html',
{'ioDict': ioDict})
context = {'modName': kwargs['mN'],
'modVersion': '1.0',
'activeSubmodule': 'ids',
'assetId': kwargs['assetId'],
'lastUpdatedAt': lastUpdatedAt,
'antivirusHtml': antivirusHtml
}
except:
...
// Note that ids-antivirus.html is the template which contains
// the for loop, that one which gives a blank output
return context
正如我所说,如果de模板是手动或动态的,则此函数返回相同的内容。
谢谢,
麦克