Для создания меню в Django можно использовать контекстный процессор - template context processor.
Он позволяет передавать в шаблон определенную вами переменную.
Пусть у нас есть модель статей Article. Каждая статья имеет категорию Category. Мы хотим, чтобы на каждой странице выводился список из категорий, представляющий собой меню. При клике на категорию мы переходим на страницу со списком статей данной категории.
Уроки по python-фреймворку Django. В уроках по шагам раскрываются важные аспекты данного фреймворка, освещаются ошибки и сложности, с которыми может столкнуться Django разработчик.
пятница, 5 апреля 2013 г.
воскресенье, 31 марта 2013 г.
Передаем в шаблон переменные из class based view
Пусть у нас есть class based view для отображения списка статей. Данное представление размещено в файле views.py:
В этом примере в шаблоне окажется доступна переменная my_var, которую в шаблоне можно получить так: {{ my_var }}
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:
Данный класс размещен в views.py:
Работая с class based views, следует помнить об этой замечательной функции def get_queryset(self): Она позволяет определить содержание параметров, передаваемых в шаблон.
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
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:
Для этого:
1. В настройках блога в меню слева выберите пункт "Шаблон", затем нажмите "Изменить HTML".
2. В открывшемся окне найдите тег </head> . Ниже него добавьте следующий код:
3. Нажмите Сохранить шаблон.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> . Ниже него добавьте следующий код:
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
Создать сайт с функционалом:
- публичная часть
- административная часть, защищенная паролем
- сайт должен давать возможность создания любого числа страниц с содержимым, подобным статье (название статьи, содержимое, время создания).
- пока никаких товаров, никаких комментариев и изображений, никаких тегов, никакого поиска, никакого RSS.... об этом будем думать в других задачах.
Подписаться на:
Сообщения (Atom)