2013-03-27 44 views
0

我有Django应用程序,并有一个问题: 类别和网页应用程序有相同的URL:Django的URL碰撞

这里是category.urls.py:

urlpatterns += patterns('', 
    url('(?P<slug>[0-9A-Za-z-_.]+)/$', Category.as_view(), name='category') 
) 

这里是页。 urls.py:

urlpatterns += patterns('', 
    url(r'^(?P<slug>[0-9A-Za-z-_.]+)$', Page.as_view(), name='page') 
) 

因此,这里是一个问题 - 你可以用这样的网址不能打开网页,所以我需要这个解决方案:

如果这里存在类别与网址slu - - 打开分类视图,如果没有类别与这样的网址,转到页面视图。

但我不知道如何与Django的右做到这一点,没有像这样创造附加功能:

def freeurl(request, slug): 
    try: 
     Category.objects.get(slug=slug) 
     go to Category view 
    except Category.DoesNotExists: 
     go to Page view 

这可能吗?

+0

问你的SEO部门要发生什么的时候会有用相同的蛞蝓一些类别页面有。) – yedpodtrzitko 2013-03-29 10:55:59

+0

嗯,他们不在乎:) – user1341596 2013-03-31 11:32:57

+0

好吧,如果功能从属于像SEO这样的东西,这很糟糕。) – yedpodtrzitko 2013-03-31 14:08:10

回答

0

很简单:包括urls.py有不同的前缀)

主要urls.py

urlpatterns = patterns('', 
    # ... snip ... 
    (r'^category/', include('category.urls')), 
    (r'^page/', include('page.urls')), 
) 

编辑:

你的主张看起来是这样,那么:

def freeurl(request, slug): 
    try: 
     cat = Category.objects.get(slug=slug) 
    except Category.DoesNotExist: 
     try: 
      page = Page.objects.get(slug=slug) 
     except Page.DoesNotExist: 
      raise Http404() 
     else: 
      return render_to_response('page.html', {'object': page}, context_instance=RequestContext(request)) 
    else: 
     return render_to_response('cat.html', {'object': cat}, context_instance=RequestContext(request)) 

编辑2:

有一个项目恰好解决您的问题,检查出来:

https://github.com/jacobian/django-multiurl

+0

谢谢,我知道。但我无法使用前缀类别和页面视图。这就是为什么我问这个问题.... – user1341596 2013-03-29 10:22:10

+0

所以直接在模式中加前缀是不可能的,我猜? IE浏览器。 'r'^ category - (?P [0-9A-Za-z -_。] +)$''用于类别和'r'^页 - (?P [0-9A-Za-z- 。] +)$''为页面 – yedpodtrzitko 2013-03-29 10:59:56

+0

否,这也是不可接受的解决方案。 我认为Django已经在我的问题 – user1341596 2013-03-29 13:18:42

0
urlpatterns += patterns('', 
    url(
     r'^category/(?P<slug>[0-9A-Za-z-_.]+)/$', 
     Category.as_view(), 
     name='category' 
    ) 
) 

urlpatterns += patterns('', 
    url(
     r'^page/(?P<slug>[0-9A-Za-z-_.]+)/$', 
     Page.as_view(), 
     name='page' 
    ) 
) 
+0

不,我不能在URL中添加类别/和页面/单词。这是来自SEO部门的要求。 – user1341596 2013-03-29 10:20:08