2017-06-22 10 views
0

私はPythonとDjangoを初めて使い、ブログを開発しています。ユーザーがサイトにログインして投稿を追加し、すべての投稿を自宅に表示されます。同時に私はユーザーの投稿をユーザープロフィールに表示したい。ブログ投稿のためDjangoのユーザー投稿はすべての投稿からフィルタリングされ、ユーザープロフィールに表示されます

私のモデルは

from django.db import models 
from django.utils import timezone 

class Blogpost(models.Model): 
    author = models.ForeignKey('auth.User') 
    title = models.CharField(max_length=200) 
    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 __str__(self): 
    return self.title 

とviews.pyです:

views.py  

from django.contrib.auth.decorators import login_required 
from django.shortcuts import render 
from blogpost.models import Blogpost 

def home(request): 
    context = {} 
    template = 'home.html' 
    return render(request,template,context) 

def about(request): 
    context = {} 
    template = 'about.html' 
    return render(request,template,context) 

@login_required(login_url='/accounts/login/') 
def userprofile(request): 
    user = request.user 
    context = {'user': user} 
    user_posts=Blogpost.objects.filter(author=request.user).order_by('-published_date') 
    template = 'profile.html' 
    return render(request,template,context,{'user_posts':user_posts}) 

私は、クエリセットで返されるユーザーからの投稿を表示するには、このテンプレートを使用しています。

profile.html 

{% extends 'base.html' %} 
{% load staticfiles %} 

{% block blogprofile %} 

     {{ user.username }} 
     {{ user.email }} 

    {% for Blogpost in user_posts %} 
      <div class="post"> 

       <div class="date"> 
        <p>{{ Blogpost.published_date }}</p> 
        <p>{{ Blogpost.author }}</p> 
       </div> 

       <h1><a href="{% url 'post_detail' pk=Blogpost.pk %}">{{ Blogpost.title }}</a></h1> 
       <p>{{ Blogpost.text|linebreaksbr }}</p> 

      </div> 
    {% endfor %} 

{% endblock %} 

投稿が取得されないのでprofile.htmlを開くと、ユーザー名とメールのみが表示されます。誰でも私が間違っているところで私を修正してください。

+0

フレンドリーヒント:あなたは、Pythonに新しいしていることから、読むために数分かかり、[PEP 8](https://www.python.org/dev/ peps/pep-0008 /)。 – Melvyn

答えて

1
はこれにあなたのビューを変更し

@login_required(login_url='/accounts/login/') 
def userprofile(request): 
    user = request.user 
    user_posts = Blogpost.objects.filter(author=request.user).order_by('-published_date') 
    template = 'profile.html' 
    return render(request, template, {'user_posts':user_posts,'user': user}) 
+0

ありがとうこのビューは動作しています。私のコードが機能しなかった理由を説明してください。私はまたコンテキスト= {'ユーザー':ユーザー}リターンレンダリング(リクエスト、テンプレート、コンテキスト、{'user_posts':user_posts}) – Faz

+1

レンダリングで2辞書を渡していた、それは動作しません、あなたはすべてを渡す必要があります1つの辞書、あなたのコンテキストは辞書で、1つはレンダリングに渡していたので、djangoは最初のものを取っていて、それはユーザーのものです – Exprator

+0

ありがとう..私はこれで一日を過ごしました:-) – Faz

関連する問題