Django-CMS AppHooks与冲突的网址?

时间:2012-11-28 17:05:13

标签: django django-cms

我正试图以不同的方式使用django-cms app hooks。我只有一个应用程序,具有不同的网页。对于每个页面,我创建了一个AppHook,因为我想用cms控制所有这些。

要做到这一点,在app中,我做了一个包,每个页面都有urls.py文件,例如:

/urls
   /home_urls.py
   /portfolio_urls.py
   /contacts_urls.py

以下是一些app钩子的定义:

class WebsiteHome(CMSApp):
    name = _("cms-home")
    urls = ["website.urls.home_urls"]

apphook_pool.register(WebsiteHome)


class WebsiteServices(CMSApp):
    name = _("cms-services")
    urls = ["website.urls.services_urls"]

apphook_pool.register(WebsiteServices)

无论如何,问题是:我对正则表达式没有任何控制权。每一个都在它找到的第一个正则表达式上输入,在这种情况下,是

中的urlpattern
  

website.urls.home_urls

尽管有不同的apphHooks。

示例:

如果我写了一个slug联系人(有一个apphook到WebsiteContacts),它仍然会转到与WebsiteHome(app hook)关联的home_urls.py文件。

有没有人有类似的问题?


基本上,我想说的是正则表达式出了问题。我做不到:

url(r'^$', [...]),

url(r'^', [...]),

如果我放'$',它就不会进入任何正则表达式。如果我接受它,它总是进入

  

website.urls.home_urls.py

尽管slug具有不同的Apphooks,但与不同的urls.py文件相关联。

2 个答案:

答案 0 :(得分:0)

你试过r'^/$'吗?我在某些app-hook网址中使用r'^/?$',但我想知道r'^$'是否因为'/'而失败了?

答案 1 :(得分:0)

由于您已将每个网址文件定义为CMS中的各个应用程序挂钩,因此他们每个都会附加到CMS中的某个页面,例如

www.mysite.com/home
www.mysite.com/contacts
www.mysite.com/services
etc

由于这些网址文件附加到网页上,因此可以防止urlpatterns之间发生冲突。例如,我有一个名为News的CMS应用程序附加的URL文件,如下所示;

urlpatterns = patterns(
    '',
    url(r'^(?P<slug>[-_\w]+)/$', NewsDetailView.as_view(), name='news_detail'),
    url(r'^$', NewsListView.as_view(), name='news_list'),
)

哪个附加到mysite.com/news的页面,所以如果我转到mysite.com/news/myslug,我会点击NewsDetailView,如果我转到mysite.com/news,我会点击NewListView

使用此示例,如果您有联系人的slug,请转到mysite.com/contacts/contact-slug以点击NewsDetailView

如果你不知道的话,只有urlpatterns的旁注,正则表达式中的^表示要匹配的模式的开始,而$表示结束。 URL dispatcher docs