Перехват приложения django-cms при ошибке домашней страницы

Я играю с django-cms и хочу создать привязку к существующему приложению. Это нормально, если страница, которую я выбираю для показа хука приложения, не является домашней страницей.

Это мой urls.py для моего приложения, которое я подключаю:

from django.conf.urls.defaults import patterns, include, url

urlpatterns = patterns('films.views',
    url(r'^$', 'index'),
    url(r'^(?P<film_id>\d+)/$', 'detail'),
)

cms_app.py выглядит следующим образом:

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

class FilmApphook(CMSApp):
    name = _("Film Apphook")
    urls = ["films.urls"]

apphook_pool.register(FilmApphook)

У меня есть URL-адреса:

/ (<- set to have the slug home, but django-cms doesn't seem to serve it at /home if it's the startpage)
/news
/...

Когда я устанавливаю на домашней странице приложение-хук, он отображает индекс моих фильмов. Просмотры, но я получаю 404, переходя к любым подробным действиям.

I.e

/ <- correctly renders films.index
/home <- 404
/home/1 <- 404
/1 <- 404

Если вместо этого я изменю хук приложения на новости, все будет работать нормально (или если я сделаю другую страницу домашней страницей).

/news <- correctly renders films.index
/news/1 <- correctly renders films.detail

Кажется, проблема в том, что django-cms игнорирует слаг для стартовой страницы, можно ли как-то обойти это?

Я, вероятно, должен упомянуть, что я пытался установить URL-адрес перезаписи, чтобы обойти это, и хотя /home затем обслуживается, /home/1 все еще дает 404.


person Andrew Barrett    schedule 04.02.2012    source источник


Ответы (2)


Это немного хитрый обходной путь, но я могу жить с ним на сегодняшний день. В основном я добавляю дочернюю страницу в /home с именем /films, убедившись, что она не находится в навигации, и также добавляю туда app-hook.

Домашняя/fake-child-page не имеет собственного контента, поэтому я могу с этим жить, и у меня остались URL-адреса, которые я хочу.

/ <- films.views.index
/films/1 <- films.views.details/1
person Andrew Barrett    schedule 04.02.2012
comment
Спасибо за этот ответ. Для всех намерений и целей это работает. Минус только в том, что вы видите ненужную страницу в админке. Мне удалось получить слаг подстраницы, установив reverse_id на странице и {% slug page_attribute 'myReverseId' %}. - person thnee; 07.06.2012

Это может быть ошибка вашей версии django-cms:

https://github.com/divio/django-cms/issues/47

person Timmy O'Mahony    schedule 04.02.2012
comment
Я использую 2.2, в котором есть исправление этой ошибки. Крюк приложения работает (т.е. индекс работает нормально), только маршрутизация URL-адресов неверна. - person Andrew Barrett; 04.02.2012