django-cms:如何从与之关联的应用程序中获取页面

时间:2016-02-11 17:40:43

标签: python django django-cms

鉴于这个apphook:

class NewsHook(CMSApp):
    name = _("News")
    urls = ["apps.news.urls"]

apphook_pool.register(NewsHook)

apps.news.models内的这个模型:

class Article(models.Model):
    title = models.CharField(max_length=255)
    ...

是否可以引用apphook关联的页面,例如,文章中的方法?

从模型方面来说,我已经达到article._meta.app_labelarticle._meta.app_config.verbose_name,但这只会分别产生'news''News'

我从https://github.com/divio/django-cms/blob/7888ab8421bb836c8f7a1127d9a2bf4d4bbdf23e/cms/models/pagemodel.py#L82了解到,可以使用page.application_urls访问网页的apphook,这会给我'u'NewsHook'

但我错过了一个链接。

我想我可以通过application_urls字段过滤Pages并查找与我的article._meta.app_config.verbose_name的匹配,但这既不是故障安全也不是漂亮。

有什么好主意的想法吗?

1 个答案:

答案 0 :(得分:1)

我知道这个问题已经有一年了,可能OP已经弄明白了,但我遇到了类似的问题,我通过直接在方法上引用apphook解决了这个问题。

from applications.cms_apps import ApplicationAppHook
from cms.models.pagemodel import Page

class Application(models.Model):
    def related_cms_page(self):
        return Page.objects.filter(application_namespace=ApplicationAppHook.app_name).public().first()

我更进一步,创建了一个使用application_namespace值来检索页面的模板标签

from cms.models.pagemodel import Page

@register.assignment_tag()
def get_page_by_namespace(application_namespace_str):
    try:
        return Page.objects.filter(application_namespace=application_namespace_str).public().first()
    except AttributeError:
        # EAFP ;)
        return None

在模板上:

{% get_page_by_namespace 'applications_apphook' as page %}
{% if page %}
    {{ page.get_menu_title }}
    {# Official Django CMS templatetags also works in this instance, i.e. {% page_attribute "page_title" page %} but it seems a bit redundant to me #}
{% endif %}