Django CMS apphooks – 使用應用鉤子來添加主題應用

[轉] http://www.codingsoho.com/zh/blog/djangocms-apphook-serial-app/python

前言

http://www.codingsoho.com/zh/blog/djangocms-plugin-integrate-serail-app/一文裏,咱們介紹瞭如何使用插件來添加專題內容、django

若是使用普通應用,須要添加對應的URL,那麼訪問該頁時會轉向該應用。若是用插件,那麼不須要特別指定URL,它將會做爲頁面的一部分添加。服務器

若是咱們想讓應用附着在某個頁面上而不須要特別爲它設定URL,效果就像前面介紹的News&Blogs,該怎麼作呢?用apphooks,下面就將介紹如何在咱們的djangoCMS項目中添加這個專題應用。app

建立apphooks

建立CMSApp子類,它會告訴CMS如何來引入這個應用。這個類應該寫在文件cms_apps.py文件裏,該文件須要新建。url

from cms.app_base import CMSApp
from cms.apphook_pool import apphook_pool
from django.utils.translation import ugettext_lazy as _

@apphook_pool.register # register the application
class SerialsApphook(CMSApp):
    app_name = "serials"
    name = _("Serial Application")

    def get_urls(self, page=None, language=None, **kwargs):
        return ["serials.urls"]

這些字段以下:spa

  • app_name屬性,CMS系統裏指向鉤子應用的名字
  • name 是管理員用戶可讀的名字
  • get_urls()實際上會將應用hook進,返回URL列表,這樣咱們就不須要本身在項目的URL裏添加該應用的URL,CMS會來處理

重啓服務器runserver。新建文件只有在重啓服務器以後纔會被加載,只有新建文件時才須要這樣作。.net

將應用掛鉤到某個頁面上

如今咱們須要建立一個頁面,而且經過apphook將這個應用附着到這個頁面上。插件

建立頁面 http://127.0.0.1:8000/zh/course1code

注意:頁面須要首先發布而後才能使用這個apphookserver

這時候打開頁面高級設置,能夠看到應用的選擇框裏面多了剛纔咱們添加的Serial Application

選擇保存後刷新網頁,就能夠看到跟訪問http://127.0.0.1:8000/zh/course同樣的效果了。

如今咱們能夠將下面語句從項目URL (csblog.urls)裏刪除了, CMS會處理這個URL,不須要額外指定。

url(r'^course/', include('serials.urls')),

要注意的是:鉤子應用的URL名字是有namespace的,必定要加上,不然會提示不存在。

class Serial(models.Model):
    def get_absolute_url(self):
        return reverse("serials:serial_detail", kwargs={"pk":self.pk})

另外,不能給子頁添加apphook。

官方文檔:

The apphook 「swallows」 all URLs below that of the page, handing them over to the attached application. If you have any child pages of the apphooked page, django CMS will not be able to serve them reliably.

相關文章
相關標籤/搜索