0

我有 django 应用程序,但有一个问题:类别和页面应用程序具有相同的 url:

这是 category.urls.py:

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

这是page.urls.py:

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

所以这里有一个问题——你不能用这样的 url 打开页面,所以我需要这个解决方案:

如果此处存在来自 url 的带有 slug 的类别 - 打开类别视图,如果没有具有此类 url 的类别,请转到页面视图。

但我不知道如何在 django 上使用 RIGHT 来执行此操作,而无需创建这样的附加功能:

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

可能吗 ?

4

2 回答 2

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

于 2013-03-27T22:56:51.793 回答
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'
   )
)
于 2013-03-28T01:44:37.167 回答