django cms 和 zinnia 骨架覆盖

2 投票
2 回答
1139 浏览
提问于 2025-04-18 10:13

我正在尝试把 zinnia 连接到 django-cms 3.0。

我已经启动了 zinnia,并且运行得很好。现在我想开始更改样式。更具体地说,我想覆盖 templates/zinnia/skeleton.html 这个模板。

但是一旦我添加了这个模板来覆盖原来的模板,URL 反向解析就开始失败了。

NoReverseMatch at /en-us/blog/
Reverse for 'entry_archive_index' with arguments '()' and keyword arguments '{}' not found. 0 pattern(s) tried: []

所有的 URL 都使用了命名空间,比如 {% url 'zinnia:entry_archive_index' %},但在命令行中反向解析也失败了。

还有什么其他方法可以用来调试这个问题吗?也许是因为本地化的问题?

这是我的 URL 配置:

from django.conf.urls import patterns, url, include
from django.conf.urls.i18n import i18n_patterns
from django.contrib import admin
from django.conf import settings

admin.autodiscover()

urlpatterns = i18n_patterns(
    '',
    url(r'^admin/', include(admin.site.urls)),
    url(r'^blog/', include('zinnia.urls', namespace='zinnia')),
    url(r'^comments/', include('django.contrib.comments.urls')),
    url(r'^tinymce/', include('tinymce.urls')),
    url(r'^', include('cms.urls')),
)

if settings.DEBUG:
    urlpatterns = patterns(
        '',
        url(r'^media/(?P<path>.*)$', 'django.views.static.serve',
            {'document_root': settings.MEDIA_ROOT, 'show_indexes': True}),
        url(r'', include('django.contrib.staticfiles.urls')),
    ) + urlpatterns

设置:

INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.admin',
    'django.contrib.sites',
    'django.contrib.comments',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'django.contrib.contenttypes',
    'my_main_django_cms_app',
    'cms',
    'mptt',
    'menus',
    'south',
    'sekizai',
    'djangocms_text_ckeditor',
    'djangocms_picture',
    'djangocms_inherit',
    'djangocms_googlemap',
    'cmsplugin_contact',

    'tinymce',
    'tagging',
    'zinnia_threaded_comments',
    'zinnia',
    'cmsplugin_zinnia',
)

我的 my_main_django_cms_app 结构是:

.
├── cms_plugins.py
├── forms.py
├── __init__.py
├── manage.py
├── models.py
├── settings.py
├── static
├── templates
│   ├── base.html
│   ├── home.html
│   └── zinnia
│       └── skeleton.html
├── urls.py
├── wsgi.py

我的版本信息:

Django==1.6.5
Pillow==2.4.0
South==0.8.4
argparse==1.2.1
beautifulsoup4==4.3.2
cmsplugin-contact==1.0.0
cmsplugin-zinnia==0.6
django-app-namespace-template-loader==0.1
django-blog-zinnia==0.14.1
django-classy-tags==0.5.1
django-cms==3.0
django-mptt==0.6.0
django-reversion==1.8.1
django-sekizai==0.7
django-tagging==0.3.2
django-tinymce==1.5.2
django-xmlrpc==0.1.5
djangocms-admin-style==0.2.2
djangocms-googlemap==0.0.5
djangocms-inherit==0.0.1
djangocms-picture==0.0.2
djangocms-text-ckeditor==2.1.6
gevent==1.0.1
greenlet==0.4.2
gunicorn==19.0.0
my_main_django_cms_app==0.1
html5lib==1.0b3
ipdb==0.8
ipython==2.1.0
psycopg2==2.5
pyparsing==2.0.2
pytz==2014.4
six==1.7.2
wsgiref==0.1.2
zinnia-threaded-comments==0.2

2 个回答

0

我在使用django-blog-zinnia的开发版本时,发现不再出现“EntryMenu未加载”的问题了。所有与菜单相关的错误都消失了。根据我的理解,这个问题是因为zinnia本身的命名空间存在问题。Fantomas42在开发版本中似乎已经解决了这个问题。

这个问题可以在这里查看:https://github.com/django-blog-zinnia/cmsplugin-zinnia/issues/29

1

我这几天一直在尝试把 zinnia 集成到 django cms 中,下面是我的一些经验分享。现在我已经能用自己的 django cms 模板来使用 zinnia 了,但还是没法让 cmsplugin_zinnia 提供的菜单正常工作。

跟你的设置相比,我做了以下几个改动:

  • 删除了 zinnia 的命名空间,所以 url(r'^blog/', include('zinnia.urls', namespace='zinnia')) 变成了 url(r'^blog/', include('zinnia.urls'))
  • cmsplugin_zinnia.cmsapp.ZinniaApphook 中添加了 app_name = 'zinnia'
  • demo_cmsplugin_zinniasettings.py 文件中,把 cms 移到了 zinnia 之后,cmsplugin_zinnia 之前。

这样一来,我就可以在新建 Django CMS 页面时,在 Advanced Settings 下选择 Zinnia Weblog 作为 Application,并按照 Django CMS 文档 的建议,给它一个独特的 Application Instance Name。页面的名称或它的 url/slug 字段并不重要。

接下来,我可以自己创建一个不包含任何 zinnia 相关内容的 skeleton.html,并让 zinnia.base.html 扩展我新的骨架模板。

不过,这时 cmsplugin_zinnia 文档 提到:

  • “一旦注册了 apphook,你可以在 urls.py 中去掉 zinnia.urls 的引用,然后重启服务器,就能看到效果。”

但我却遇到了 NoReverseMatch at /name_of_my_blog_app/ 的异常,只有在像上面那样不带 namespace 包含 zinnia.urls 时,这个异常才会消失。

由于距离你最初发帖已经过去几周,你可能已经解决了这个问题。如果还没有,希望这些信息能帮到你。如果你在某个时候遇到过同样的问题(EntryMenu not loaded),并且能够解决,请告诉我。

撰写回答