2010-11-13 47 views
0

我有一個名爲「產品」,管理「產品」和「類別」的應用程序。我有一個是這樣的產品/ views.py(與通用視圖):合併2 Django(非常相似)urlconfs在一個

Objects = { 
    'products': {'model':Product, 'form':ProductForm} 
    'categories': {'model':Category, 'form':CategoryForm} 
} 

和這樣的事情:

def list(request, obj): 
    model = Objects[obj]['model'] 
    queryset = model.objects.all() 
    return object_list(request, queryset=queryset) 

,然後我的項目urls.py是這樣的:

from django.conf.urls.defaults import * 

urlpatterns = patterns('', 
    (r'^products/',  include('products.product_urls.py'), {obj:'product'}), 
    (r'^categories/', include('products.category_urls.py'), {obj:'category'}), 
) 

,然後我有兩個urls.py類別和產品就像這樣:

1)產品/ PRO duct_urls.py

urlpatterns = patterns('', 
    url(r'^$', 'products.views', name='products-list'), 
) 

2),並在產品非常類似的線/ category_urls.py

urlpatterns = patterns('', 
    url(r'^$', 'products.views', name='categories-list'), 
) 

正如你可以看到,產品/ product_urls.py和產品/ category_urls.py真的很相似除了網址名稱。

我的問題是:是否有一種巧妙的技術可以將products/product_urls.py和products/category_urls.py合併到一個模塊中,並且根據他們正在工作的「對象」對url還是有不同的名稱上。即有一個產品/ urls.py將管理兩個對象:產品和類別

回答

0

對我來說,這似乎是顯而易見的:

from django.conf.urls.defaults import * 

urlpatterns = patterns('', 
    url(r'^products/$', 'products.views.list', {'obj':'product'}, name='products-list'), 
    url(r'^categories/$', 'products.views.list', {'obj':'category'}, name='categories-list'), 
) 

url功能只能從元組方式不同之處在於,你可以使用關鍵字ARGS(如name)在裏面。

你的代碼好像會破壞,如果你真的嘗試逐字。這一點以及所感知的顯而易見性讓我懷疑你的實際用例是否更復雜,並且需要不同的答案。

此外,object-list generic view已採用您嘗試使用您的Objects方法創建的功能。 (參見queryset參數;另外,create-objectform_class參數)。舉例:

from django.conf.urls.defaults import * 
from models import Product, Category 
from django.views.generic.list_detail import object_list 

urlpatterns = patterns('', 
    url(r'^products/$', 
     object_list, 
     {'queryset': Product.objects.all()}, 
     name='products-list'), 
    url(r'^categories/$', 
     object_list, 
     {'queryset': Category.objects.all()}, 
     name='categories-list'), 
) 
相關問題