代码之家  ›  专栏  ›  技术社区  ›  Joe

Django:路由相同的模型,但不同的类别字段来分隔URL

  •  1
  • Joe  · 技术社区  · 15 年前

    我有以下模型和URL路由。有一个发布模型,我想根据类别路由到不同的URL。有没有办法通过传递额外的信息 app/urls.py ?

    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/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")
        )
    

    1 回复  |  直到 15 年前
        1
  •  2
  •   Manoj Govindan    15 年前

    我不知道如何按照您所指示的方式使用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"),        
    ...