2016-06-25 11 views
0

これは私の最初のDjangoプロジェクトです。私はいくつかのチュートリアルを続けてきました。そのほとんどは非常に便利です。私は最初のアプリとして非常にシンプルなブログを作っています。今ではチュートリアルが私に見せてくれたことを少し超えて拡張しています。つまり、すべての投稿が属する新しいモデルCategoryを追加しました。モデル自体と関連するすべてのものが動作します。今私が問題を抱えているのはURLを解決することだけです。私は通常、投稿の一覧を表示するためにページネーションを使用していますが、追加の要素やオプションの要素、つまりカテゴリを追加したいと思います。だから私はsite.com/posts/?page=2の選択肢を持っているだけでなく、site.com/posts/?cat=news&page=2Django - ページネーションにいくつかの要素を含めるには

models.py

# Model for blog post category 
class Category(models.Model): 
    title = models.CharField(max_length=120) 
    slug = models.SlugField(unique=True) 
    description = models.TextField() 

    class Meta: 
     verbose_name_plural = "Categories" 

    def __str__(self): 
     return self.title 

    def get_absolute_url(self): 
     return reverse("posts:detail", kwargs={"slug": self.slug}) 
# Model for blog post 
class Post(models.Model): 
    title = models.CharField(max_length=120) 
    slug = models.SlugField(unique=True) 
    category = models.ManyToManyField(Category, blank=True, through='CategoryToPost') 
    content = models.TextField() 
    image = FilerImageField(null=True, blank=True, related_name="post_image") 
    created = models.DateTimeField(auto_now=False, auto_now_add=True) 
    published = models.DateTimeField(auto_now=False, auto_now_add=True) 
    updated = models.DateTimeField(auto_now=True, auto_now_add=False) 

    def __str__(self): 
     return self.title 

    def Category(self): 
     return self.category.all() 

    def get_absolute_url(self): 
     return reverse("posts:detail", kwargs={"slug": self.slug}) 
# Model for assigning post to a category 
class CategoryToPost(models.Model): 
    post = models.ForeignKey(Post) 
    category = models.ForeignKey(Category) 

urls.py

from .views import (
    post_list, 
    post_detail 
    ) 

urlpatterns = [ 
    url(r'^$', post_list), 
    url(r'^(?P<slug>[\w-]+)/$', post_detail, name='detail'), 
] 

ノートのようなものを使用することができないだけでリストを参照するときurls.pyからの行は、url(r'^posts/', include("posts.urls", namespace='posts')),

です。

views.py

def post_detail(request, slug): 

    instance = get_object_or_404(Post, slug=slug) 

    context = { 
     "title": instance.title, 
     "instance": instance, 
    } 

    return render(request, "post_single.html", context) 

def post_list(request): 

    queryset_list = Post.objects.all().order_by("-published") 
    paginator = Paginator(queryset_list, 5) 

    page = request.GET.get('page') 
    try: 
     queryset = paginator.page(page) 
    except PageNotAnInteger: 
     queryset = paginator.page(1) 
    except EmptyPage: 
     queryset = paginator.page(paginator.num_pages) 

    context = { 
     "title": "Post List", 
     "object_list": queryset, 
    } 

    return render(request, "post_list.html", context) 

私はどこ改ページのドキュメントを開始し、Djangoのためには、この上で非常に明確でなくてもわからないんだけど、私はpost_list内でこのどこかを追加する必要があることを知っているが、正直に言うと。

答えて

1

views.py

... 
queryset_list = Post.objects.all().order_by("-published") 
if request.GET.get('cat'): 
    queryset_list = queryset_list.filter(category__slug=request.GET.get('cat')) 
... 

urls.py

from .views import (
    post_list, 
    post_detail 
    ) 

urlpatterns = [ 
    # Add name to url so that we can use it with reverse 
    url(r'^$', post_list, name='list'), 
    url(r'^(?P<slug>[\w-]+)/$', post_detail, name='detail'), 
] 

models.py

class Category(models.Model): 
    ... 
    def get_absolute_url(self): 
     return reverse('posts:list')+'?cat='+self.slug 
+0

はい、確かに働いていることをお願いいたします。 1つの最後の質問。どのように私は要求に常に猫を含めるためにモデルにURLリゾルバを追加しますか? – Ablivion

+0

私は従いません。詳しく教えてください。 – xtranophilist

+0

モデルカテゴリには関数get_absolute_urlがあるので、直接リンクすることができます。私は現在urls.pyを使って、 'url(r '^(?P [\ w - ] +)/ $'、post_detail、name = 'detail')という投稿を使っています。追加のURLを追加する必要があります。これには '?cat ='が含まれています。私は次の行を追加して周りに遊んだが、問題は正しいreg式に何が含まれているのか不明だということです?cat =その中に: 'url(r '^?cat =(&?P [\ w - ] +)/ $ '、post_detail、name =' category ')、' – Ablivion

関連する問題