Форум сайта python.su
Есть сайт, в основном на flatpages. Необходимо на каждую страницу добавить новостную ленту. Написал маленькое приложение, какой есть красивый способ "встроить' его вывод в flatpages?
Извините за беспокойство по легким вопросам, недавно перешел на Django
Офлайн
Ну flatpages потому так и называются, что они простые=) И там по определению кроме текста и заголовка ничего и быть не должно, но если уж сильно так хочется их использовать, ну я бы сделал наверное тегами, хоть это и не сильно изящьное решение.
Почитай про django-cms.
Офлайн
Все элементарно.
1. Разобраться с документацией по flatpages (http://docs.djangoproject.com/en/dev/ref/contrib/flatpages/?from=olddocs#how-it-works).
2. Разобраться с документацией по middleware (http://docs.djangoproject.com/en/dev/topics/http/middleware/).
3. Написать на основе дефолтных middleware (http://code.djangoproject.com/browser/django/trunk/django/contrib/flatpages/middleware.py#L5) и view (http://code.djangoproject.com/browser/django/trunk/django/contrib/flatpages/views.py#L20) свои собственные.
4. Использовать самопальный middleware.
P.S. Другой вариант, простой и быстрый, зато менее правильный, познавательный и интересный, это тупо написать view, работающую с django.contrib.flatpages.models.FlatPage в качестве модели, и в самом конце URLconf сопоставить ее регулярке перехватывающей абсолютно все запросы.
Отредактировано (Ноя. 11, 2010 17:16:22)
Офлайн
SyaoРешение довольно хорошее, только бессмысленное. По мойму проще уже своё решение написать. Не для этого были сделаны flatpages.
Все элементарно.
1. Разобраться с документацией по flatpages (http://docs.djangoproject.com/en/dev/ref/contrib/flatpages/?from=olddocs#how-it-works).
2. Разобраться с документацией по middleware (http://docs.djangoproject.com/en/dev/topics/http/middleware/).
3. Написать на основе дефолтных middleware (http://code.djangoproject.com/browser/django/trunk/django/contrib/flatpages/middleware.py#L5) и view (http://code.djangoproject.com/browser/django/trunk/django/contrib/flatpages/views.py#L20) свои собственные.
4. Использовать самопальный middleware.
Офлайн
Эх. Мб кому-нибудь пригодиться.
Моделька:
class New(models.Model):
""" Новости """
title=models.CharField(u'Заголовок', max_length=20)
body=models.CharField(u'Текст',max_length=255)
class Staticpage(models.Model):
"""
Статические страницы
"""
url = models.CharField(u'Ссылка', max_length=100, db_index=True)
title = models.CharField(u'Заголовок', max_length=200)
content = models.TextField(u'Контент', blank=True)
def get_absolute_url(self):
return self.url
data_news=New.objects.get(pk='1') #Злой хак ^^
def staticpage(request, url):
"""
Показывает малоизменяемые странички
Из-за блока новостей пришлось сделать костыль
"""
if not url.endswith('/') and not url=='':
return HttpResponseRedirect("%s/" % request.path)
if not url.startswith('/'):
url = "/" + url
data=Staticpage.objects.get(url=url)
data.title = mark_safe(data.title)
data.content = mark_safe(data.content)
return render_to_response('static.html', {'data':data, 'MEDIA_URL': settings.MEDIA_URL, 'data_news':data_news})
(r'^(?P<url>.*)$', 'fashion.views.staticpage'), #Обязательно в конец
Офлайн
Doberman26rusСмысл изобретать велосипед, когда можно переписать только небольшую часть уже готового качественного кода? А насчет назначения, Django - это не CMS, поэтому ее элементы можно оборачивать доп. логикой, и это, ИМХО, правильно.
Решение довольно хорошее, только бессмысленное. По мойму проще уже своё решение написать. Не для этого были сделаны flatpages.
Офлайн
MoroznuiА зачем Staticpage? Есть django.contrib.flatpages.models.FlatPage.
Отредактировано (Ноя. 12, 2010 13:42:20)
Офлайн
SyaoЯ не об этом. Не стоит делать из велосипеда танк. Иначе он выйдет кривым и стрелять будет из выхлопной трубы, а не из дула, как надо=)
Смысл изобретать велосипед
Офлайн
MoroznuiПишется свой context-processor и соответствующие теги добавляются в шаблон для статических страниц
Есть сайт, в основном на flatpages. Необходимо на каждую страницу добавить новостную ленту. Написал маленькое приложение, какой есть красивый способ "встроить' его вывод в flatpages?
Извините за беспокойство по легким вопросам, недавно перешел на Django
Офлайн