5

我有一个 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 没有调用它。

4

3 回答 3

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'),
)
于 2013-05-17T05:03:07.277 回答
0

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

此外,您必须在您的视图中使用 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: apphooks 使用的 url 不适用于 reverse() 或 {% url %}可以帮助你。

编辑 2刚刚发现当前的 django-cms 没有cms.middleware.multilingual.MultilingualURLMiddleware了。

于 2014-02-20T00:58:16.350 回答
0

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

于 2016-08-23T17:46:53.410 回答