2010-09-20 71 views
1

我有以下模型和網址路線。我希望根據類別路由到不同的URL以創建一個Post模型。有沒有辦法通過在app/urls.py中傳遞額外的信息來做到這一點?Django:路由相同的模型,但不同的類別字段分開的URL

app/posts/models.py

class Post(models.Model): 
    author = ... 
    title = ... 
    body = ... 
    category = models.CharField() 

app/urls.py

urlpatterns = patterns(
    '', 
    (r'^blog/', include('posts.urls'), {'category': 'blog'}), 
    (r'^school/', include('posts.urls'), {'category': 'school'}), 
) 

我的理解是,從app/urls.py額外的信息包含在app/posts/urls.py每個URL路徑。有沒有辦法使用這些信息?我可以用什麼來代替下面的感嘆號?

app/posts/urls.py

from models import Post 

queryset = Post.objects.order_by('-pub_date') 

urlpatterns = patterns(
    'django.views.generic.list_detail', 
    url(r'^$', 'object_list', 
     {'queryset': queryset.filter(category=!!!!!!)} 
     name="postRoot"), 

    url(r'^(?P<slug>[-\w]+)/$', 'object_detail', 
     {'queryset': queryset.filter(category=!!!!!!)}, 
     name="postDetail") 
    ) 

謝謝,喬

回答

2

我不知道的方式來使用URL參數已指示的方式。如果有人知道更好,請糾正我。

我前段時間面臨類似的情況,並在list_detail視圖中使用薄包裝進行了處理。

# views.py 
from django.views.generic.list_detail import object_list 

def object_list_wrapper(*args, **kwargs): 
    category = kwargs.pop('category') 
    queryset = Post.objects.filter(category = category) 
    kwargs['queryset'] = queryset 
    return object_list(*args, **kwargs) 

#urls.py 
urlpatterns = patterns('myapp.views', 
    url(r'^$', 'object_list_wrapper', {}, name="postRoot"),   
... 
+0

很確定這是答案。根據我的經驗,只能從視圖函數中檢索由urlpatterns捕獲的參數。 – 2010-09-20 19:06:44

+0

是的,我也這麼認爲,但我想問問。無論如何,它非常感謝你。 – Joe 2010-09-22 20:15:33

相關問題