2013-05-31 34 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它不工作...所以我需要這個所有的菜單項。模板標籤是唯一的選擇嗎? – Mission

+0

@Mission好問題。我有同樣的問題!你是如何解決它的?例如。我需要添加menu_icon字段(完成),現在我必須在show_menu中加載它。謝謝! – Daviddd

+0

現在有一點晚了,但它是用Django CMS Beta 3構建的。認爲用戶可能仍然對通過Google發現此問題感興趣:http://stackoverflow.com/a/21849360/870769 – sthzg