0

「商品」と「カテゴリー」を管理する「商品」というアプリがあります。そして、次のようなproducts/views.py(一般的なビューを含む)があります:

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 が 2 つあります。

1) 製品/product_urls.py

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

2) products/category_urls.py の非常によく似た行

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

ご覧のとおり、products/product_urls.py と products/category_urls.py は、URL 名を除いて非常によく似ています。

私の質問は次のとおりです。products/product_urls.py と products/category_urls.py を単一のモジュールに「マージ」し、作業中の「オブジェクト」に応じて URL の名前が異なるスマートな手法はありますか。つまり、製品とカテゴリの両方のオブジェクトを管理する単一の products/urls.py があります。

4

2 に答える 2

0

同じ url モジュールを 2 回含めることもできますが、名前空間付きの urlを使用してください。

于 2010-11-13T12:50:51.760 に答える
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関数は、キーワード引数 ( など) を使用できるという点で、タプル アプローチとのみ異なりますname

あなたのコードは、実際に文字通り試してみると壊れてしまうようです。これは、認識された自明性とともに、実際のユースケースがより複雑であり、別の答えが必要かどうか疑問に思います.

さらに、オブジェクト リストの一般的なビューには、アプローチで作成しようとしている機能が既に採用されていますObjects。(queryset引数を参照してください。また、create-objectの引数も参照してくださいform_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'),
)
于 2010-11-13T16:38:46.497 に答える