0

我安装了 Django 1.5.1 和 django-cms 2.4.2

但是我还没有集成百日草博客和 django-cms。

我能够创建一个博客条目,但是在访问博客条目时

8000/en/weblog/2013/10/13/test-entry/

我收到一个 404 Page not Found

有什么想法吗?

4

1 回答 1

3

可能的原因: urls.py 中包含的 urlpatterns 的顺序。Django-Cms 设计不足。

修复:将 cms.urls 放在 zinnia.urls 之后:

 # patterns or i18n_patterns here.
 urlpatterns = i18n_patterns('',                                                                                                                                           
     url(r'^admin/', include(admin.site.urls)),                                                                                                                            
     url(r'^blog/', include('zinnia.urls')),                                                                                                                               
     url(r'^comments/', include('django.contrib.comments.urls')),                                                                                                          
     url(r'^', include('cms.urls')),
 )

解释:

如果你在 zinnia url 之前包含 cms url,django-cms "slug" 模式匹配广泛的 URL,包括 Zinnia 博客条目 URL:

<RegexURLPattern pages-details-by-slug ^(?P<slug>[0-9A-Za-z-_.//]+)/$>

例如,它将匹配:“blog/2014/01/20/test-article-about-something/”

在它匹配为 django-cms:pages-details-by-slug 之后,整个 URI 存储在“slug”变量中,并作为参数(在“kwargs”中)提供给 cms.views.detail 视图函数。这个视图将调用:

cms.utils.page_resolver import get_page_from_request(request, use_path=slug)

并且 cms 将找不到(并会引发“Resolver404”异常)任何合适的页面来呈现,因为此 URI 属于 Zinnia 博客。

故事结局。

资源:

  1. “详细信息”视图可以在这里找到:cms.views
  2. django url 解析逻辑在这里:django.core.urlresolvers主要有两个“resolve”方法。(行:315 *递归,209 *非递归)
于 2014-01-22T07:22:04.460 回答