我使用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不返回任何内容。这里缺少什么?
答案 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了解差异。