воскресенье, 31 марта 2013 г.

Передаем в шаблон переменные из class based view

Пусть у нас есть class based view для отображения списка статей. Данное представление размещено в файле views.py:

from django.views.generic import DetailView, ListView
from article.models import Article


class ArticleListView(ListView):

    model = Article

    def get_queryset(self):

        tag = self.kwargs['tag']
        return Article.objects.filter(tag__tag_url=tag)


    def get_context_data(self, *args, **kwargs):

        context = super(ArticleListView, self).get_context_data(**kwargs)
        context['my_var'] = 'Это моя переменная'
        return context

Благодаря функции get_context_data(), можно передать в шаблон дополнительные переменные.
В этом примере в шаблоне окажется доступна переменная my_var, которую в шаблоне можно получить так: {{ my_var }}

Получить параметр из url в Class Based View

Хотите, чтобы у вас происходило следующее?
url: /article/php - в class based view получаем параметр php
url: /article/python - в class based view получаем параметр python

Для этого вы должны определить паттерн в urls.py:
url(r'^aticle/(?P<category>[a-z]+)/$', ArticleListView.as_view()),
Согласно этому паттерну, получается, что если обратиться по адресу /article/php, то будет задействовано представление ArticleListView, основанное на классе (это class based view).
Данный класс размещен в views.py:

from django.views.generic import DetailView, ListView
from article.models import Article


class ArticleListView(ListView):

    model = Article

    def get_queryset(self):

        category_url = self.kwargs['category']

        return Article.objects.filter(category=category_url)

В этом классе мы из url получаем параметр category посредством self.kwargs['category']. Затем мы достаем все статьи и отбираем из них те, где категория соответствует параметру category, полученному из url.
Работая с class based views, следует помнить об этой замечательной функции def get_queryset(self): Она позволяет определить содержание параметров, передаваемых в шаблон.

воскресенье, 24 марта 2013 г.

Обход элементов словаря python

Напишите на python функцию, которая позволяет преобразовать словарь в строки, выводимые в консоль как показано в двух примерах:

dict1 = {'a':1, 'b':{'aa':11, 'bb':22}, 'c':3}

Результат: 
[a]=1
[b][aa]=11
[b][bb]=22
[c]=3

   
dict2 = {'a':1, 'b':{'aa':11, 'bb':22, 'cc':{'aaa':111, 'bbb':222, 'ccc':333}, 'dd':44}, 'c':3}

Результат:
[a]=1
[b][aa]=11
[b][bb]=22
[b][cc][aaa]=111
[b][cc][bbb]=222
[b][cc][ccc]=333
[b][dd]=44
[c]=3

    


среда, 20 февраля 2013 г.

Блог за 30 минут на Django

При изучении чего-либо важно учиться у профессионалов. Я уже сделал простой блог с тегами и с RSS-feed по материалам приведенного видео, попробуйте и вы.

Включаем подсветку кода на Blogspot

Вот так подсвечивается код python:
class BlogFeed(Feed):
    title = "Yesnik Site"
    description = "My site about Django"
    link = "/blog/feed/"
    
    def items(self):
        return Post.objects.all().order_by("-created")[:2]
    
    def item_title(self, item):
        return item.title
        
    def item_description(self, item):
        return item.body
        
    def item_link(self, item):
        return u"/blog/%d" % item.id 

Для этого:
1. В настройках блога в меню слева выберите пункт "Шаблон", затем нажмите "Изменить HTML".
2. В открывшемся окне найдите тег </head> . Ниже него добавьте следующий код:














3. Нажмите Сохранить шаблон.
4. Чтобы размещаемый код подсвечивался, перейдите при создании сообщения для блога из режима "Создать" в режим "HTML". Там заключите вставленный код в теги pre, к примеру:
<pre class="brush: python;">
class BlogFeed(Feed):
    title = "Yesnik Site"
    description = "My site about Django"
    link = "/blog/feed/"
</pre>

воскресенье, 20 января 2013 г.

Задача №1 по созданию сайта на Django


Создать сайт с функционалом:
  1. публичная часть
  2. административная часть, защищенная паролем
  3. сайт должен давать возможность создания любого числа страниц с содержимым, подобным статье (название статьи, содержимое, время создания).
  4. пока никаких товаров, никаких комментариев и изображений, никаких тегов, никакого поиска, никакого RSS.... об этом будем думать в других задачах.

суббота, 25 февраля 2012 г.

Опрос (ч.4)

В части 3.2 мы ознакомились с основными возможностями, которые нам дает админка Django. В этой части мы отобразим список последних двух свежих опросов, который будет доступен пользователям сайта.