4

まず、これは簡単な質問だと思います。私はDjangoを使い始めたばかりで、すべての初心者がそうであるように、簡単なブログを作成すると思いました。

単純なデータモデル、FKを介したユーザーへのリンクを含むPostモデルがあります。

models.py

class Post(TimeStampedActivate):
    """
    A blog post
    """
    title = models.CharField(max_length=255)
    slug = models.SlugField()
    excerpt = models.TextField(blank=True)
    body = models.TextField()
    publish_at = models.DateTimeField(default=datetime.datetime.now())
    created = models.DateTimeField(auto_now_add=True)
    modified = models.DateTimeField(auto_now=True)
    active = models.BooleanField(default=False, help_text='Is the blog post active?')
    user = models.ForeignKey(User, related_name='post_user')

    def __unicode__(self):
        return self.title

次に、投稿を作成した人のユーザー名と一緒にすべての投稿を一覧表示するページが必要です。私の現在のビューは次のようになります。

views.py

def index(request):
    posts = Post.objects.filter(active=True)   
    user = User.objects.get(id=1)
    return render(request, 'blog/index.html', {'posts': posts, 'user': user})

私のテンプレート 現在、これはID1に一致するユーザー名を表示するだけです。

{% for post in posts %}
    <h2><a href="{{ post.get_absolute_url }}">{{ post.title }}</a></h2>
    <p>{{ post.excerpt|truncatewords:30 }}</p>
    <p>Posted by {{ user.first_name }} {{ user.last_name }}</p>
{% endfor %}

投稿を担当するユーザーの名前と名前を確実に取得するために、views.pyファイルを変更するにはどうすればよいですか?

4

2 に答える 2

3

意見:

def index(request):
    posts = Post.objects.filter(active=True)   
    return render(request, 'blog/index.html', {'posts': posts})

レンプレート:

{% for post in posts %}
    <h2><a href="{{ post.get_absolute_url }}">{{ post.title }}</a></h2>
    <p>{{ post.excerpt|truncatewords:30 }}</p>
    <p>Posted by {{ post.user.first_name }} {{ post.user.last_name }}</p>
{% endfor %}
于 2012-05-14T22:40:55.607 に答える
1

テンプレートでは、「user」だけでなく「post.user」を使用してください。

{{ post.user.first_name }} {{ post.user.last_name }}

「user」は現在ログインしているユーザーです。

RequestContextを使用し、TEMPLATE_CONTEXT_PROCESSORSに認証を追加した場合、userはrequest.userと同じです。https://docs.djangoproject.com/en/dev/topics/auth/#authentication-data-in-templates

于 2012-05-14T22:37:50.787 に答える