2016-12-13 19 views
0

カテゴリと投稿が入っているブログを作りたい。 カテゴリを表示する必要があります。クリックすると、このカテゴリの記事が表示されている別のサイトにリダイレクトされます。プライマリキーdjangoでリダイレクトする{%url%}

models.py:

class Category(CMSPlugin): 
    title = models.CharField(max_length=20, default='category') 

    def __unicode__(self): 
     return self.title 


class Blog_post(CMSPlugin): 
    category = models.ForeignKey(Category) 
    style = models.ForeignKey(Blog_style) 
    title = models.CharField(max_length=200, default='title') 
    description = models.CharField(max_length=200,default='description') 
    image = models.ImageField(upload_to='static', null=True, blank=True) 
    text = models.TextField() 
    created_date = models.DateTimeField(default=timezone.now) 
    published_date = models.DateTimeField(blank=True, null=True) 

    def publish(self): 
     self.published_date = timezone.now() 
     self.save() 

    def __unicode__(self): 
     return self.title 

views.py

def Blog_list(request): 
    posts = Blog_post.objects.filter(published_date__lte=timezone.now()).order_by('published_date') 
    category = Category.objects.all() 
    return render(request, 'blogspot.html', {'posts': posts, 'category':category}) 

def post_detail(request, pk): 
    post = get_object_or_404(Blog_post, pk=pk) 
    return render(request, 'post_detail.html', {'post': post}) 

def category_detail(request, pk): 
    cat = get_object_or_404(Category, id=pk) 
    post_with_category = Blog_post.objects.filter(category=cat) 
    return render(request, 'articles.html', {'post_with_category': post_with_category}) 

blogspot.html

{% for post in posts %} 
    <h1><a href="{% url 'post_detail' pk=post.pk %}">{{post.title}}</a></h1> 
    <a href="{% url 'category_detail' pk=post.category.id %}" >{{ post.category }}</a> 
    {{post.title}} 
    {{ post.description }} 
    {{ post.image }} 
    {{ post.text }}{{ post.published_date }} 
{% endfor %} 

は、これまでのところ、すべての[OK]を動作します。 {{post.title}}をクリックして、post_detailにリダイレクトしました。今私はカテゴリーと同じ論理を作りたいと思う。 {{post.category}}をクリックするとarticles.htmlにリダイレクトして、特定のカテゴリのすべての記事を見ることができます。

編集:

カテゴリに投稿を表示するコードを挿入しました。私はforループにこだわった。私が投稿に記載されたループを使用する場合、私はすべての投稿とカテゴリを取得します。問題は、1つのカテゴリに2つの投稿があり、このループでテンプレートの2倍の「カテゴリ」が表示される場合です。

私はforループを編集しました。

{% for post in category %} 
     {{post.title}} 
     {% endfor %} 

私はこのループで<a href="{% url 'category_detail' pk=post.category.id %}" >{{post.title}}を挿入した場合私は逆の試合を取得していません。私は

とURL views.py category_detailを変更しようとした はlocalhost/<category>/ のように見えるはずですそして、私はあなたを理解していれば別の質問では、"select*from Table Where Column_id= id ;

urls.py

url(r'^blog/$', views.Blog_list, name='Blog_list'), 
    url(r'^blog/(?P<pk>\d+)/$', views.post_detail, name='post_detail'), 
+0

URLは仕事に上記のhtmlのために、以下のHREFタグのようなものを含めるしたいと思います) 'をあなたのBlog_listビューに表示しますか? – Doug

+0

テンプレートのすべてのカテゴリが印刷されます。私は "ポスト"ループを使用する場合は、私は多くの投稿と同様に印刷されたカテゴリを取得します。カテゴリ1に5つの投稿がある場合。私のループはカテゴリ1を5回印刷します – OverHeat

+0

すべての投稿テンプレートのすべてのカテゴリを印刷していますか? – Doug

答えて

2

のためのQRM代替COMAND何ですdjangoでは、メインオブジェクトを通してFKオブジェクトを参照することができます。あなたcategory_detailビューで、その後

<a href="{% url 'category_detail' pk=post.category.id %}" >{{ post.category }}</a> 

:あなたのpost.categoryは、あなたのCategoryモデルのインスタンスであるため、あなたのテンプレートはの線に沿って何かを持っているでしょうので、そう、あなたは、逆引き参照を行うためにpost.category.idを使用することができるはずですあなただけのルックアップを取得するためにpkを使用します。

cat = get_object_or_404(Category, id=pk) 
post_with_category = Blog_post.objects.filter(category=cat) 

次に、あなたの新しいpost_with_categoryオブジェクトのリストを経由して、同じカテゴリを持つ新しいURLリンクの投稿のリストを表示することができます。

EDIT: `カテゴリ= Category.objects.all(含む背後にある理由は何ですか

url(r'^cat/(?P<pk>[0-9]+)/$', views.category_detail, name='category_detail'), 
+0

助けていただきありがとうございます。あなたはURLで私を助けることができる、私は数字を取得します。どのようにしてURLにカテゴリの名前を付けることができますか? – OverHeat

+0

カテゴリ2に2つのタイトルがある場合、 "投稿に投稿"するので、 "カテゴリ"という名前が2回印刷されます。どうすればこの問題を解決できますか?私は5つの投稿を持っている場合私はこの2つの投稿を持っていますカテゴリ2をテンプレートで5回印刷されます – OverHeat

+0

このコードは 'articles.html'にカテゴリをリストしていない限り、元の投稿と同じカテゴリのすべての投稿を表示します重複をリストする。あなたのカテゴリーモデルからは、1つのカテゴリーに2つのタイトルを持つことをサポートしているようには見えません...? – Doug

関連する問題