Найти - Пользователи
Полная версия: Встроить app в flatpages
Начало » Django » Встроить app в flatpages
1
Moroznui
Есть сайт, в основном на flatpages. Необходимо на каждую страницу добавить новостную ленту. Написал маленькое приложение, какой есть красивый способ "встроить' его вывод в flatpages?
Извините за беспокойство по легким вопросам, недавно перешел на Django
Doberman26rus
Ну flatpages потому так и называются, что они простые=) И там по определению кроме текста и заголовка ничего и быть не должно, но если уж сильно так хочется их использовать, ну я бы сделал наверное тегами, хоть это и не сильно изящьное решение.
Почитай про django-cms.
Syao
Все элементарно.
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 сопоставить ее регулярке перехватывающей абсолютно все запросы.
Doberman26rus
Syao
Все элементарно.
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.
Решение довольно хорошее, только бессмысленное. По мойму проще уже своё решение написать. Не для этого были сделаны flatpages.
Moroznui
Эх. Мб кому-нибудь пригодиться.
Моделька:
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'), #Обязательно в конец
Спасибо всем, элегантного решения не получилось :)
Syao
Doberman26rus
Решение довольно хорошее, только бессмысленное. По мойму проще уже своё решение написать. Не для этого были сделаны flatpages.
Смысл изобретать велосипед, когда можно переписать только небольшую часть уже готового качественного кода? А насчет назначения, Django - это не CMS, поэтому ее элементы можно оборачивать доп. логикой, и это, ИМХО, правильно.
Syao
Moroznui
А зачем Staticpage? Есть django.contrib.flatpages.models.FlatPage.
Doberman26rus
Syao
Смысл изобретать велосипед
Я не об этом. Не стоит делать из велосипеда танк. Иначе он выйдет кривым и стрелять будет из выхлопной трубы, а не из дула, как надо=)
Dr.Livsi
Moroznui
Есть сайт, в основном на flatpages. Необходимо на каждую страницу добавить новостную ленту. Написал маленькое приложение, какой есть красивый способ "встроить' его вывод в flatpages?
Извините за беспокойство по легким вопросам, недавно перешел на Django
Пишется свой context-processor и соответствующие теги добавляются в шаблон для статических страниц
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB