如何在django中获取用户(当前已登录)的帖子?

时间:2019-07-17 13:14:05

标签: python django

用户登录并进入其帐户后,必须看到那里的旧帖子以及他们过去上传的内容。如果尝试通过比较当前登录的用户(request.user)和数据库中可用的用户来在模板中使用if语句。如果条件为true,则与该用户相关的所有帖子都必须在我的帐户页面中可见。但这如果条件不起作用。当我删除此条件时,它将显示所有帖子,无论这些帖子与用户相关还是由用户上传。当我应用此条件时,它什么也不显示,没有错误,它仅显示我的导航栏,这意味着其余的代码很好,而if语句存在问题。

模板:

{% for i in userstweet %}
    {% if request.user==i.user  %}
        Username : {{i.user}}
        <br />
        {{i.datetime}}
        <br />
        <img src="{{i.image.url}}"  width=400 height=400 />
        <br />
        <br />
        {{i.tweet}}
    {% endif %}
{% endfor %}

查看:

def myaccount(request):
    return render(request, 'tweets/myaccount.html', {'userstweet': Tweets.objects.all})  

url:

path('myaccount', views.myaccount,name='account')                   

我希望当前登录用户上传的帖子会显示在我的帐户页面上,但不会显示任何内容。

4 个答案:

答案 0 :(得分:1)

仅获取当前用户并查询该用户的所有Tweet更好吗?您可以做的是:

def myaccount(request):
    current_user = request.user
    # Where user is whatever foreign key you specified that relates to user.
    user_tweets = Tweets.objects.filter(user=current_user)

    return render(request, 'tweets/myaccount.html', {'userstweet': user_tweets})  

答案 1 :(得分:0)

您可以通过以下方式实现:

def myaccount(request):
    return render(request, 'tweets/myaccount.html', {'userstweet': Tweets.objects.filter(user=request.user)}) 

答案 2 :(得分:0)

简单的答案:您在objects.all之后忘记了“()”

长答案:

我会考虑采用另一种方法,当您拥有大量推文时,您将遇到运行时错误。您的Tweet类在您的views.py中应该有一个user的外键。您可以获取所有用户Tweet并将此查询集发送到模板,如下所示:

usertweets = Tweets.objects.filter(user=request.user)
return render(request, 'tweets/myaccount.html', {'userstweet': usertweets}) 

您的网站将以这种方式运行得更快。希望我能帮助

答案 3 :(得分:0)

删除Django模板中的request

例如

{% if user == i.user %}
OR
{% if user.username == i.user.username  %}