2013-03-27 1 views
0

У меня есть Джанго приложение, и есть одна проблема: Категория и приложения страницы имеют один и тот же URL:Джанго 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') 
) 

так вот проблема - вы не можете открыть страницу с такой URLs, так что мне нужно это решение:

Если здесь существует Категория с slug из url - open Категория просмотра, если нет категории с таким URL-адресом, перейдите на страницу просмотра.

Но я не знаю, как сделать это с помощью RIGHT на Джанго, не создавая дополнительную функцию, как это:

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

это возможно?

+0

спросить вашего отдела SEO, что должно произойти, когда будет категория с той же слизняк, как некоторые страница была.) – yedpodtrzitko

+0

Ну, им все равно :) – user1341596

+0

хорошо, если функциональность подчинена чему-то вроде SEO, это отстой.) – yedpodtrzitko

ответ

0

это просто: включает в себя как urls.py с другим префиксом)

главного urls.py:.

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

EDIT:

ваше предложение может выглядеть следующим образом, то:

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)) 

EDIT 2:

есть проект решения именно вашей проблемы, проверить его:

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

+0

Спасибо, я знаю. Но я не могу использовать префикс для просмотра категории и страницы. Вот почему я задаю этот вопрос .... – user1341596

+0

так что префикс его прямо в шаблоне тоже невозможно, я думаю? То есть. 'r '^ category - (? P [0-9A-Za-z -_.] +) $'' для категорий и 'r '^ page - (? P [0-9A-Za-z-_ .] +) $ ''для страниц – yedpodtrzitko

+0

нет, это тоже неприемлемые решения. Я думал, что у django есть встроенное решение, как я написал в моем вопросе – user1341596

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