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

标签 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知道页面的 apphook 可以通过 page.application_urls 访问,这给了我 'u'NewsHook'

但是我缺少一个链接。

我想我可以通过 application_urls 字段过滤页面并查找与我的 article._meta.app_config.verbose_name 的匹配项,但这既不安全也不美观。

有更好的方法吗?

最佳答案

我知道这个问题已经有一年了,可能 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 %}

关于python - django-cms:如何从与其关联的应用程序获取页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35346334/

相关文章:

python - 使用大于 24 小时的时间值

python - Django-为什么使用了ajax后就变成了一个空页面

python - 表单不接受附加参数

python - Django:m 看起来不像模块路径

django - django-cms 中的插件上下文处理器

django - 如何将自定义模板页面添加到夹层?

python - 创建包时,如何管理弱依赖项的迁移?

python - 按分位数对 Pandas 数据框进行排名

python - 迭代 python 列表值,其中每个组合仅出现一次但位置独立

.net - 删除boo中的一个变量