无法将条目渲染到页面

时间:2016-01-08 16:35:46

标签: python django

我在Django为自己制作了一个简单的博客,但有一个奇怪的问题。我有一个简单的模型如下所示:

Entry:
    - title
    - content

这是我目前正在使用的模板:

{% for entry in context.entries %}
<div class="row">
    <div class="col-xl-2 col-lg-2 col-md-2 hidden-sm hidden-xs"></div>
    <div class="col-xl-8 col-lg-8 col-md-8 col-sm-12 col-xs-12">
    <div class="entry">
        <div class="header">
            <table>
                <tr>
                    <td class="title"><h2>{{ entry|title }}</h2></td>
                    <td class="datetime">01.01.2016 00:00:00</td>
                </tr>
            </table>
        </div>
        <div class="content">
            {{ entry|content }}
        </div>
        <div class="footer">
            <a href="#">#some</a>
            <a href="#">#tag</a>
            <a href="#">#right</a>
            <a href="#">#here</a>
        </div>
    </div>
    <div class="col-xl-2 col-lg-2 col-md-2 hidden-sm hidden-xs"></div>
    </div>
    </div>
{% endfor %}

但是,我在{{ entry|content }}行上遇到 TemplateSyntaxError ,这很奇怪。

views.py文件:

import json, termcolor
from django.shortcuts import render
from django.http import HttpResponse
from .models import *

# Create your views here.
def index(request, page="1"):
    page = int(page)
    context = {
        "title": "Erdin's Blog",
        "entries": []
    }

    entries = Entry.objects.all()
    r_entries = entries[::-1]
    del entries
    interest = [page*10-10, page*10]

    context["entries"].extend(r_entries[interest[0]:interest[1]])

    print(termcolor.colored(context["entries"][0].content, "green"))

    return render(request, "home.elms.html", context)

进一步调查

我已经在数据库上有一个条目。我还检查了它是否使用sqliteman正确查询到数据库中。假设我将此单个条目命名为entry变量,我调用entry.identry.titleentry.content并打印到终端,这是成功的。数据库没有问题。

环境

  • python3
  • Django 1.8.7

完整编辑

我目前意识到问题完全不同了。我打电话给{% for entry in context.entries %},但我已经将上下文调用到模板中,因此引擎正在context词典中查找context键。

2 个答案:

答案 0 :(得分:1)

|语法适用于template filters。要获取模板中的模型值,需要点符号

{{ entry.title }}
{{ entry.content }}

请注意,{{ entry|title }}没有抛出任何错误的原因是built-in title template filter。但是没有content模板过滤器 - 这就是您在包含{{ entry|content }}的行上看到错误的原因。

答案 1 :(得分:0)

因为我解决了自己的问题,所以我为了其他有相同问题的用户而写这里。

因为我在views.py中返回了一个渲染,如下所示:

Page Name: /page.xsp
java.lang.IllegalArgumentException: Invalid persisted content session id: .
    at com.ibm.xsp.persistence.AbstractPersistedContent.(AbstractPersistedContent.java:42)
    at com.ibm.xsp.persistence.FilePersistedContent.(FilePersistedContent.java:46)
    at com.ibm.xsp.persistence.FilePersistenceService.createPersistedContent(FilePersistenceService.java:73)
    at com.ibm.xsp.model.domino.wrapped.DominoRichTextItem.getPersistedContent(DominoRichTextItem.java:3086)
    at com.ibm.xsp.model.domino.wrapped.DominoRichTextItem.extractCID(DominoRichTextItem.java:1393)
    at com.ibm.xsp.model.domino.wrapped.DominoRichTextItem.extractMimeText(DominoRichTextItem.java:1341)
    at com.ibm.xsp.model.domino.wrapped.DominoRichTextItem.getRichTextMime(DominoRichTextItem.java:1280)
    at com.ibm.xsp.model.domino.wrapped.DominoRichTextItem.getHTML(DominoRichTextItem.java:392)
    at com.ibm.xsp.model.domino.wrapped.DominoRichTextItem.toString(DominoRichTextItem.java:378)
    at com.ibm.xsp.util.FacesUtil.convertValue(FacesUtil.java:1146)
    at com.ibm.xsp.renderkit.html_basic.ReadOnlyRteRenderer.encodeText(ReadOnlyRteRenderer.java:86)
    at com.ibm.xsp.renderkit.html_basic.ReadOnlyRteRenderer.encodeValue(ReadOnlyRteRenderer.java:50)
    at com.ibm.xsp.renderkit.html_basic.ReadOnlyValueRenderer.encodeBegin(ReadOnlyValueRenderer.java:69)
    at com.ibm.xsp.renderkit.ReadOnlyAdapterRenderer.encodeBegin(ReadOnlyAdapterRenderer.java:146)
    at com.ibm.xsp.renderkit.ReadOnlyAdapterRenderer.encodeBegin(ReadOnlyAdapterRenderer.java:146)
    at javax.faces.component.UIComponentBase.encodeBegin(UIComponentBase.java:956)
    at com.ibm.xsp.util.FacesUtil.renderComponent(FacesUtil.java:842)
    at com.ibm.xsp.util.FacesUtil.renderComponent(FacesUtil.java:853)
    at com.ibm.xsp.util.FacesUtil.renderComponent(FacesUtil.java:853)
    at com.ibm.xsp.util.FacesUtil.renderComponent(FacesUtil.java:853)
    at com.ibm.xsp.util.FacesUtil.renderComponent(FacesUtil.java:853)
    at com.ibm.xsp.util.FacesUtil.renderComponent(FacesUtil.java:853)
    at com.ibm.xsp.extlib.renderkit.html_extended.layout.AbstractApplicationLayoutRenderer.renderChildren(AbstractApplicationLayoutRenderer.java:1401)
    at com.ibm.xsp.extlib.renderkit.html_extended.layout.AbstractApplicationLayoutRenderer.writeContentColumn(AbstractApplicationLayoutRenderer.java:1203)
    at com.ibm.xsp.extlib.renderkit.html_extended.layout.AbstractApplicationLayoutRenderer.writeMainContent(AbstractApplicationLayoutRenderer.java:1105)
    at com.ibm.xsp.extlib.renderkit.html_extended.layout.AbstractApplicationLayoutRenderer.writeMainFrame(AbstractApplicationLayoutRenderer.java:237)
    at com.ibm.xsp.extlib.renderkit.html_extended.layout.AbstractApplicationLayoutRenderer.encodeBegin(AbstractApplicationLayoutRenderer.java:1367)
    at com.ibm.xsp.renderkit.ReadOnlyAdapterRenderer.encodeBegin(ReadOnlyAdapterRenderer.java:146)
    at javax.faces.component.UIComponentBase.encodeBegin(UIComponentBase.java:956)
    at com.ibm.xsp.extlib.component.layout.UIVarPublisherBase.encodeBegin(UIVarPublisherBase.java:112)
    at com.ibm.xsp.util.FacesUtil.renderComponent(FacesUtil.java:842)
    at com.ibm.xsp.util.FacesUtil.renderComponent(FacesUtil.java:853)
    at com.ibm.xsp.util.FacesUtil.renderComponent(FacesUtil.java:853)
    at com.ibm.xsp.util.FacesUtil.renderComponent(FacesUtil.java:853)
    at com.ibm.xsp.util.FacesUtil.renderComponent(FacesUtil.java:853)
    at com.ibm.xsp.util.FacesUtil.renderComponent(FacesUtil.java:853)
    at com.ibm.xsp.util.FacesUtil.renderComponent(FacesUtil.java:853)
    at com.ibm.xsp.component.UIViewRootEx._renderView(UIViewRootEx.java:1317)
    at com.ibm.xsp.component.UIViewRootEx.renderView(UIViewRootEx.java:1255)
    at com.ibm.xsp.application.ViewHandlerExImpl.doRender(ViewHandlerExImpl.java:651)
    at com.ibm.xsp.application.ViewHandlerExImpl._renderView(ViewHandlerExImpl.java:321)
    at com.ibm.xsp.application.ViewHandlerExImpl.renderView(ViewHandlerExImpl.java:336)
    at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:103)
    at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:210)
    at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:120)
    at com.ibm.xsp.controller.FacesControllerImpl.render(FacesControllerImpl.java:270)
    at com.ibm.xsp.webapp.FacesServlet.serviceView(FacesServlet.java:261)
    at com.ibm.xsp.webapp.FacesServletEx.serviceView(FacesServletEx.java:157)
    at com.ibm.xsp.webapp.FacesServlet.service(FacesServlet.java:160)
    at com.ibm.xsp.webapp.FacesServletEx.service(FacesServletEx.java:138)
    at com.ibm.xsp.webapp.DesignerFacesServlet.service(DesignerFacesServlet.java:103)
    at com.ibm.designer.runtime.domino.adapter.ComponentModule.invokeServlet(ComponentModule.java:576)
    at com.ibm.domino.xsp.module.nsf.NSFComponentModule.invokeServlet(NSFComponentModule.java:1335)
    at com.ibm.designer.runtime.domino.adapter.ComponentModule$AdapterInvoker.invokeServlet(ComponentModule.java:853)
    at com.ibm.designer.runtime.domino.adapter.ComponentModule$ServletInvoker.doService(ComponentModule.java:796)
    at com.ibm.designer.runtime.domino.adapter.ComponentModule.doService(ComponentModule.java:565)
    at com.ibm.domino.xsp.module.nsf.NSFComponentModule.doService(NSFComponentModule.java:1319)
    at com.ibm.domino.xsp.module.nsf.NSFService.doServiceInternal(NSFService.java:662)
    at com.ibm.domino.xsp.module.nsf.NSFService.doService(NSFService.java:482)
    at com.ibm.designer.runtime.domino.adapter.LCDEnvironment.doService(LCDEnvironment.java:357)
    at com.ibm.designer.runtime.domino.adapter.LCDEnvironment.service(LCDEnvironment.java:313)
    at com.ibm.domino.xsp.bridge.http.engine.XspCmdManager.service(XspCmdManager.java:272)

模板应该在上下文中调用字典:

render(request, "home.elms.html", context)

{% for entry in entries %}