【问题标题】:Django view doesn't display model value - Django 1.5Django 视图不显示模型值 - Django 1.5
【发布时间】:2013-08-11 17:57:11
【问题描述】:

我使用 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!")

------------------------------------home/views.py

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

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

------------------------------------------ 模板/主页/索引.html

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

------------------------------------------- urls.py

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 不返回任何内容。这里缺少什么?

【问题讨论】:

    标签: django view model


    【解决方案1】:

    正如@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

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

    【讨论】:

    • 感谢凯文和丹尼尔。我刚开始使用 Django 项目和新的框架...问题已解决...我现在可以在页面上看到我的文本...
    【解决方案2】:

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

    编辑:添加一些代码

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

    def IndexView(request):
        home=Home.create("Hello World!")
    
        return render(request, 'index.html', {'home': home},)
    

    【讨论】:

    • @Noreen 更新答案
    猜你喜欢
    • 2013-10-12
    • 2013-08-14
    • 2018-02-17
    • 1970-01-01
    • 2021-02-14
    • 1970-01-01
    • 1970-01-01
    • 2011-11-25
    • 2017-09-24
    相关资源
    最近更新 更多