Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 31, 2011 19:42:20

beliy_shum
От:
Зарегистрирован: 2009-03-11
Сообщения: 67
Репутация: +  0  -
Профиль   Отправить e-mail  

Как расширить django cms?

Добрый день, подскажите пожалуйста как мне расширить django cms.
Опишу то, в чём нуждаюсь(на примере вопросов и ответов):

Я написал свою модель - вопрос

class QuestionAnswer(models.Model):
RACE_CHOICES = (
('duck killer', 'Утка убийца'),
('wise tomato', 'Разумный помидор'),
)
#id = models.AutoField(primary_key=True)
question = models.TextField(verbose_name="Вопрос")
answer = models.TextField(verbose_name="Ответ")
date = models.DateField(default=datetime.datetime.now, verbose_name="Дата")
published = models.BooleanField(default=False)
race = models.CharField(choices=RACE_CHOICES, verbose_name="Раса")
name = models.CharField(max_length=150, verbose_name="Имя спршивающего")
class Meta:
verbose_name_plural = "Вопросы и Ответы"
verbose_name = "Вопрос"
Теперь мне нужно интегрировать её в сайт и в django cms таким образом(структура сайта из cms админки должна быть такая):

Страница о вселенной/
страница о солнечной системе/
страница о земле/
ВОПРОСЫ-О-земле/
наколько съедобны земляне?
есть ли связь между возрастом и вкусом?
политкоректные земляне обладают лучшим вкусом?
страница об уране/
страница об системе альфа центавра/
Страница об космических пришельцах/
миссия/
успехи/
поражения/
ВОПРОСЫ-О-комсических_пришельцах/
ВОПРОСЫ-О- - автоматически создающаяся стрнаица содержащая список своих детей.

Чтобы на ВОПРОСЫ-О- выводился список вопросов которые добавленны через админку как дети ВОПРОСЫ-О- или пользователями на странанице ВОПРОСЫ-О-
Соответсвенно, чтобы когда я нажимал добавить ребенка к ВОПРОСЫ-О-, мне показывалсь форма основанная на полях моем модели+ поля страницы django cms (ведь каждый вопрос также может иметь еще и slug и title)

И чтобы я мог ВОПРОСЫ-О- прикрепить в любое (и в несколько) мест.

Каким способом мне так расширить админку? Спасибо всем большое за ответы, надеюсь я правильно задал вопрос.

Причем хотелось бы, чтоб то тот узел в который добавлен вопрос, помнила сама ЦМС, и не нужно было с этим в ручную работать.

Тот пример что я привел - упрщенный а вариант а полностью все будет так:

/любой/каталог/
ВОПРОСЫ-О-[тема]/ - автоматически создаваемая страница со списокм расс (страница опрашивает всех свиох детей и строит список всех расс(или список расс жестко задаётся))
/расса утюгов/ - автоматически создаваемая страница со списком вопросов рассы утюгов
Пожалуйста, в ответе показывайте примеры кода, решить задачу описанную выше, стандартными средствами Django(приложение вопросов и ответов доступно по одному набору адресов, есть три шаблона один для vio/ один для vio/rassa/ один для vio/rassa/question1/ я могу, но как расширять CMS не понимаю.)



Офлайн

#2 Фев. 2, 2011 08:57:51

GordonF
От:
Зарегистрирован: 2010-08-22
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Как расширить django cms?

Я не совсем понял что за “автоматически создаваемая страница”, вряд ли у вас будут страницы создаваться “автоматом”.

Ну а в целом код следующий:

В models.py добавляете:

from cms.models import CMSPlugin
class QuestionAnswerPlugin(CMSPlugin):
quan = models.ManyToManyField(Employee, related_name='plugins') или quan = models.ForeignField(QuestionAnswer, related_name='plugins')
def __unicode__(self):
return self.quan.question

В этой же директории создаете файл cms_plugins.py:

from cms.plugin_base import CMSPluginBase
from cms.plugin_pool import plugin_pool
from имя_текущей_директории.models import QuestionAnswerPlugin
class QuestionAnswerPlugin(CMSPluginBase):
model = QuestionAnswerPlugin #Это выше-импортированный класс, а не текущий.
name = u“Вопросы-ответы” #Как будет выводится название плагина в django-cms
render_template = “QuestionAnswer.html” #Шаблон…

def render(self, context, instance, placeholder):
context.update({'placeholder':placeholder, ‘instance’:instance}) #Какие переменные будут передаваться шаблону.
return context

Делаете syncdb и наслаждаетесь django-cms.
Еще надо читать это: http://django-cms.readthedocs.org/en/2.1.0.rc3/index.html



Офлайн

#3 Фев. 8, 2011 13:04:47

beliy_shum
От:
Зарегистрирован: 2009-03-11
Сообщения: 67
Репутация: +  0  -
Профиль   Отправить e-mail  

Как расширить django cms?

Спасибо большое, ваш соетв очень помог. До меня не допирало что в шаблоне нужно обращаться к instance.poll.question и к instance.poll.choice_set.all а не как в документации
Подскажите пожалуйста, как мне получить на странице выше уровнем свойства плагина прикрепленного ниже уровнем.
Вот что мне нужно:
у меня есть страница 1 и у неё есть потомки - страницы к которыми способом как вы описали прикреплены объект 1, объект 2
что мне писать в шаблоне страницы 1 чтобы получить на ней таблицу:
|ссылка на странцу с объект1| объект1.свойство1|объект1.свойство2|
|ссылка на странцу с объект2| объект2.свойство1|объект2.свойство2|

Мне в шаблоне страницы 1 писать что-то типа

{% for page in self.children.all %}

<tr>
<td>page.url</td>
<td>page.pluginobject.svoystvo1</td>
<td>page.pluginobject.svoystvo2</td>
</tr>
{% endfor %}
Или что помогите пожалуйста с примером. Очень нужно.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version