Django渲染不适用于for循环但是没有它

时间:2017-08-30 13:13:36

标签: javascript jquery html css django

我一直在寻找这个,我没有找到任何解决方案。我根据下一句话用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模板是手动或动态的,则此函数返回相同的内容。

谢谢,

麦克

0 个答案:

没有答案