2013-03-27 41 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