Django-cms Apphook url无法加载

时间:2013-05-15 07:05:16

标签: python django url django-cms

我有一个django-cms项目,其中包含一个名为core的应用程序。在内核中,我创建了一个文件“cms_app.py”,如下所示:

# -*- coding: utf8 -*-
from cms.app_base import CMSApp
from cms.apphook_pool import apphook_pool
from django.utils.translation import ugettext_lazy as _

class CoreApphook(CMSApp):
    name = _(u"Core Apphook")
    urls = ["core.urls"]

apphook_pool.register(CoreApphook)

在我的core / urls.py中,我有以下代码:

# -*- coding: utf8 -*-
from django.conf.urls.defaults import patterns, include, url

urlpatterns = patterns('',

        # URLS refrentes ao apphook CoreApphook
        url(r'^$', 'noticia.views.ultimas_noticias'),
        url(r'^noticias/$', 'noticia.views.ultimas_noticias'),
        url(r'^noticias/(?P<categoria>[\w\d-]+)/$', 'noticia.views.noticias_categoria'),
        url(r'^noticias/(?P<categoria>[\w\d-]+)/(?P<pagina>\d+)/$', 'noticia.views.noticias_categoria_paginated'),
        url(r'^noticias/(?P<categoria>[\w\d-]+)/(?P<subcategoria>[\w\d-]+)/(?P<titulo>[\w\d-]+)/$', 'noticia.views.noticia'),
        url(r'^paginacao/noticias/$', 'noticia.views.noticias_categoria_paginated'),
    )

我正试图达到这个观点:

url(r'^noticias/(?P<categoria>[\w\d-]+)/(?P<subcategoria>[\w\d-]+)/(?P<titulo>[\w\d-]+)/$', 'noticia.views.noticia'),

使用此网址:

http://127.0.0.1:8000/noticias/filmes/acao/lol-e-poka-zuera/

但是Apphook没有加载urls.py文件。我已经在“Noticias”和“Noticias”的每个子页面中设置了Apphook字段。关于它的奇怪之处在于我在另一个完美运行的项目中具有相同的结构。显然我已经将应用程序“核心”设置为INSTALLED_APPS。我甚至无法想象可能导致这个问题的原因。我在我的core / urls.py中使用了一个断点,但它没有被Apphook调用。

3 个答案:

答案 0 :(得分:2)

urlpatterns = patterns('',

    # URLS refrentes ao apphook CoreApphook
    url(r'^$', 'noticia.views.ultimas_noticias', name='app_ultimas_noticias'),
    url(r'^noticias/$', 'noticia.views.ultimas_noticias', name='app_ultimas_noticias1'),
)

答案 1 :(得分:0)

你重启了服务器吗? (即使您使用manage.py runserver,也必须重新启动它)

此外,您必须在视图中使用RequestContext。 https://django.readthedocs.org/en/latest/ref/templates/api.html#subclassing-context-requestcontext

我刚遇到问题,以下情况有所帮助:

from django.shortcuts import render_to_response
from django.template import RequestContext

def some_view(request):
    # ...
    return render_to_response('my_template.html',
           my_data_dictionary,
           context_instance=RequestContext(request))

编辑:也许我想念这个问题。问题是您没有使用apphook获得任何输出,或者无法链接到它?

如果是第二个,也许django-cms: urls used by apphooks don't work with reverse() or {% url %}可以帮助你。

编辑2 刚刚发现当前的django-cms不再有cms.middleware.multilingual.MultilingualURLMiddleware

答案 2 :(得分:0)

这是一个设计限制,正如OP评论的那样。如果页面尚未发布,Django CMS将不会加载apphooked视图 它仍然像那样(当前版本是3.3.0),所以要使apphook工作,你需要发布页面 github上有一个相关的问题:https://github.com/divio/django-cms/issues/2605