2013-05-31 2 views
1

Я расширил модель Django cms Page до модели ExtendedPage и добавил page_image. Как я могу теперь использовать свойство page_image в шаблоне.Django cms доступ к расширенному свойству

Я хотел бы получить доступ к page_image свойства для каждого дочернего объекта в меню навигации ... создание меню с изображениями ...

Я продлил админ и у меня есть поле, доступное для редактирования (добавить картинку)

from django.db import models 
from django.utils.translation import ugettext_lazy as _ 
from cms.models.pagemodel import Page 
from django.conf import settings 

class ExtendedPage(models.Model): 
    page = models.OneToOneField(Page, unique=True, verbose_name=_("Page"), editable=False, related_name='extended_fields') 
    page_image = models.ImageField(upload_to=settings.MEDIA_ROOT, verbose_name=_("Page image"), blank=True) 

Спасибо!

BR

ответ

3
request.current_page.extended_fields.page_image 

должен работать, если вы используете < 2.4. В 2.4 они ввели новую систему два страниц (публикуемый/проект), так что вы, возможно, потребуются

request.current_page.publisher_draft.extended_fields.page_image 

Я обычно пишут некоторые промежуточное программное обеспечение или процессор шаблонов справиться с этим вместо того, чтобы делать это повторно в шаблоне. Что-то вроде:

class PageOptions(object): 
    def process_request(self, request): 
     request.options = dict() 
     if not request.options and request.current_page: 
      extended_fields = None 
      try: 
       extended_fields = request.current_page.extended_fields 
      except: 
       try: 
        custom_settings = request.current_page.publisher_draft.extended_fields 
       except: 
        pass 
      if extended_fields: 
       for field in extended_fields._meta.fields: 
        request.options[field.name] = getattr(extended_fields, field.name) 
     return None 

позволит вам просто сделать {{ request.options.page_image }}

+0

Привет, ваше решение прекрасно работает для текущей страницы ... Я в первую очередь просят меню ... если я использую child.publisher_draft .extended_fields.page_image не работает ... так что мне нужно это для всех пунктов меню. Являются ли templatetags единственным вариантом для этого? – Mission

+0

@ выпуск хороший вопрос. У меня такая же проблема! Как вы его решили? Например. Мне нужно добавить поле menu_icon (сделано), и теперь мне нужно загрузить его в show_menu. Благодаря! – Daviddd

+0

Немного поздно, но он встроен в Django CMS Beta 3. Думал, что это может по-прежнему представлять интерес для пользователей, которые могут найти этот вопрос через Google: http://stackoverflow.com/a/21849360/870769 – sthzg