Python Django用户帖子将从所有帖子中筛选并显示在用户配置文件中

Python Django用户帖子将从所有帖子中筛选并显示在用户配置文件中,python,django,django-models,django-templates,django-views,Python,Django,Django Models,Django Templates,Django Views,我不熟悉Python和Django,现在正在开发一个博客。我有一个模型,用户可以登录到该站点并添加他们的帖子,所有帖子都显示在主页上。同时,我希望用户的帖子显示在用户配置文件中 我的博客模式是 from django.db import models from django.utils import timezone class Blogpost(models.Model): author = models.ForeignKey('auth.User') title = mod

我不熟悉Python和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
{%extends'base.html%}
{%load staticfiles%}
{%block blogprofile%}
{{user.username}
{{user.email}
{用户_posts%}中Blogpost的百分比为%
{{Blogpost.published_date}

{{Blogpost.author}}

{{Blogpost.text | linebreaksbr}}

{%endfor%} {%endblock%}

现在,当我打开profile.html时,我只得到用户名和电子邮件,因为帖子没有被检索到。有谁能纠正我的错误。

将您的观点改为:

@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})

将您的视图更改为:

@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})

谢谢,这个视图正在运行。你能解释一下为什么我的代码不工作吗。我还使用了context={'user':user}return render(请求、模板、context,{'user_posts':user_posts})您在渲染中传递了2个字典,这不起作用,您需要在一个字典中传递所有内容,您的上下文是一个字典,您在渲染中传递了一个字典,所以django选择了第一个,那就是用户非常感谢。。我花了一整天的时间在这上面:-)谢谢,这个视图正在工作。你能解释一下为什么我的代码不工作吗。我还使用了context={'user':user}return render(请求、模板、context,{'user_posts':user_posts})您在渲染中传递了2个字典,这不起作用,您需要在一个字典中传递所有内容,您的上下文是一个字典,您在渲染中传递了一个字典,所以django选择了第一个,那就是用户非常感谢。。我花了一整天的时间在这上面:-)友好提示:因为你是Python新手,所以花几分钟阅读。友好提示:因为你是Python新手,所以花几分钟阅读。