пятница, 5 апреля 2013 г.

Template context processor для создания меню в Django

Для создания меню в Django можно использовать контекстный процессор - template context processor.
Он позволяет передавать в шаблон определенную вами переменную.
Пусть у нас есть модель статей Article. Каждая статья имеет категорию Category. Мы хотим, чтобы на каждой странице выводился список из категорий, представляющий собой меню. При клике на категорию мы переходим на страницу со списком статей данной категории.

воскресенье, 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.... об этом будем думать в других задачах.