2010-09-20 70 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

相关问题