Добавление контекста в TemplateView

категория: Django
Наконец-то закончил дизайнить и верстать, порядком надоело уже, перехожу к программированию. Сразу задача: заказчик хочет, чтоб все обычные странички можно было изменять из панели администрирования. Берем ту же страничку "Об авторе" и будем запихивать ее в базу данных. Самым подходящим будет TemplateView, правда он сам по себе просто передает шаблон, но будем запихивать в него контекст. Модель вышла такая:
class About(models.Model):
    title = models.CharField("Название", max_length=50)
    keywords = models.CharField("Ключевые слова", max_length=200, blank=True)
    description = models.CharField("Краткое описание", max_length=300, blank=True)
    image = models.ImageField(upload_to="images/", verbose_name=u'Ваше фото', 
        help_text='Размер изображения: 300x300px')
    text = models.TextField()
В urls.py нет ничего интересного, просто переписываем TemplateView:
url(r'^about/$', AboutTemplateView.as_view(), name='about'),
А вот во вьюшке все самое интересное:
#! coding: utf-8
from django.views.generic import TemplateView
from about.models import About
#Информация об авторе
class AboutTemplateView(TemplateView):
  template_name="about.html"
  def get_context_data(self, **kwards):
    context = super(AboutTemplateView, self).get_context_data(**kwards)
    #Вытаскиваем автора из базы у меня его id = 1
    context['about'] = About.objects.get(id=1)
    return context
В шаблоне выводим просто всю информацию об авторе:
{% block title %}{{ about.title }}{% endblock title %}
{% block keywords %}{{ about.keywords }}{% endblock keywords %}    
{% block description %}{{ about.description }}{% endblock description %} 
{% block title1 %}{{ about.title }}{% endblock title1 %}
{% block image %}<img src="{{MEDIA_URL}}{{about.image}}">{% endblock image %}
{% block text %}{{ about.text|safe }}{% endblock text %}
Если Вы разрабатываете на локальном сервере и не отображается картинка, то дополните settings.py и urls.py. settings.py
import os
PROJECT_ROOT = os.path.dirname(__file__)
MEDIA_ROOT = os.path.join(PROJECT_ROOT, 'media/')
urls.py
from django.conf import settings
if settings.DEBUG :
  urlpatterns += patterns('',
    (r'^media/(?P.*)$', 'django.views.static.serve', 
      {'document_root': settings.MEDIA_ROOT, 'show_indexes': True}),
    )
Но, по возможности, то что может быть статической страницей - пусть будет статической страницей))


blog comments powered by Disqus