Django视图不显示模型值 - Django 1.5

时间:2013-08-09 17:58:36

标签: django view model

我使用Django创建了一个非常简单的示例代码,但无法在我的页面上显示模型值:

----------------------------- home / models.py

from django.db import models

class Home(models.Model):
    msg = models.CharField(max_length=100)

    @classmethod
    def create(cls, msg):
        home = cls(msg=msg)
        # do something with the book
        return home

home = Home.create("Hello World!")

------------------------------------家/ views.py

from django.views.generic import TemplateView
from project.models import Home

class IndexView(TemplateView):
    model = Home
    template_name = 'home/index.html'

------------------------------------------ templates / home / index html的

{{ home.msg }}
this is a test page. I am expecting to see this....

------------------------------------------- urls.py < / p>

from django.conf.urls.defaults import patterns, include, url
from django.contrib import admin
from django.views.generic import TemplateView

admin.autodiscover()

urlpatterns = patterns('',
    # Home pagetentacl.urls
    url(r'^$', TemplateView.as_view(template_name='home/index.html')),

    # Uncomment the admin/doc line below to enable admin documentation:
    # url(r'^admin/doc/', include('django.contrib.admindocs.urls')),

    # Uncomment the next line to enable the admin:
    url(r'^admin/', include(admin.site.urls)),
)

--------------------------------------浏览器上的结果页面:

这是一个测试页面。我期待看到这个....


我不希望我的示例有数据库访问权限。我希望我的模型返回“hello world”字符串。 index.html上的home.msg不返回任何内容。这里缺少什么?

2 个答案:

答案 0 :(得分:1)

您没有为模板提供Home的实例。您需要创建一个并将其作为上下文传递给模板,格式为{'msg': msg}

编辑:添加一些代码

首先,您应该在视图中创建home的实例。我从未使用TemplateViews,所以我将使用常规视图方法。

def IndexView(request):
    home=Home.create("Hello World!")

    return render(request, 'index.html', {'home': home},)

答案 1 :(得分:0)

正如@Daniel正确指出的那样,您没有为您的模板提供Home的实例。

如果您想使用基于类的视图,请继承TemplateView并覆盖get_context_data()

class IndexView(TemplateView):

    template_name = "home/index.html"

    def get_context_data(self, **kwargs): 
        context = super(HomePageView, self).get_context_data(**kwargs)
        context["home"] = Home.create("Hello World!")
        return context

并确保您的urls.py正在使用IndexView.as_view() - 您的上述版本仅引用通用TemplateView

您在model的子类中添加TemplateView字段这一事实让我觉得您将其与DetailView混淆了。请参阅documentation了解差异。