2013-08-09 4 views
2

Я создал очень простой пример кода с использованием Django, но не может получить значение модель, которая будет отображаться на моей странице:Джанго вид не отображает модели значения - Джанго 1,5

---------- ------------------- 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' 

--------------------- --------------------- templates/home/index.html

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

------------------------------------------- URL-адреса .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». home.msg on index.html ничего не возвращает. Что здесь отсутствует?

ответ

1

Вы не даете шаблону экземпляр Home. Вам нужно создать его и передать его в шаблон в виде контекста в форме {'msg': msg}.

EDIT: Добавление код

Прежде всего, вы должны создать свой экземпляр home на ваш взгляд. Я никогда не использовал TemplateViews, поэтому вместо этого я буду использовать обычный метод просмотра.

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

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

Можете ли вы прислать мне пример кода, что вы подразумеваете под этим? – Noreen

+0

@Noreen Обновленный ответ –

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 за разницу.

+0

Спасибо, Кевин и Дэниел. Я только что начал с проекта Django и нового с фреймворком ... Проблема исправлена ​​... Теперь я вижу свой текст на странице ... – Noreen