如何创建一个个人资料页面,显示所有用户向该用户和其他用户发布的帖子



我是Django的新手,正在尝试创建一个用户可以注册并发布文章的博客网站,但我的问题是如何在用户的个人资料页面上显示用户的帖子,这样当其他阅读帖子的用户点击作者的名字时,他们就会进入post.author's个人资料页面,其中列出了post.author's最近的帖子,而不是request.user's帖子。这是我的密码。

这是accounts/views.py

views.py
@login_required()
def user_profile_view(request, username):
post = User.objects.filter(courses__author=username)
context = {'courses': courses}
return render(request, 'accounts/user_profile_view.html', context)

这是post/models.py

models.py
class Posts(models.Model):
author = models.ForeignKey(User, on_delete=models.CASCADE)
cover = ProcessedImageField(upload_to='post_featured_image',
processors=[ResizeToFill(600, 300)],
format='png',
options={'quality': 80},
blank=True)
slug = models.SlugField()
title = models.CharField(max_length=200)
body = models.TextField()
summary = models.TextField(max_length=200)

这是模板

post_list.html

{% extends 'base.html' %}
{% load static %}
{% block content %}
<div class="col-lg-6">
{% for course in courses_list %}
<div class="central-meta item">
<div class="user-post">
<div class="friend-info">
{% if post.author.profile.avatar %}
<figure>
<img src="{{ post.author.profile.avatar.url }}" alt="">
</figure>
{% else %}
<img src="{% static 'default.ico' %}" alt="">
{% endif %}
<div class="friend-name">
<ins><a href="{% url 'accounts:user_profile' post.author.username %}" title="">{{ course.author.get_full_name|title }}</a></ins>
<span>published: {{ post.published }}</span>
</div>
<div class="post-meta">
{% if course.cover %}
<img src="{{ post.cover.url }}" alt="">
{% endif %}
<div class="friend-name">
<ins><a href="{{ post.get_absolute_url }}" title="">{{ course.title|title }}</a></ins>
</div>
<div class="description">
<p><span>{{ post.summary|capfirst }}</span></p>
</div>
</div>
</div>
</div>
</div>
{% endfor %}
</div>
{% endblock content %}

这是我的账户/uls.py

urls.py
app_name = 'accounts'
urlpatterns = [
path('accounts/profile/<str:username>/', user_profile_view, name='user_profile'),
]

您应该能够通过多种方式轻松地做到这一点。

制作这样的后模型:

class Post(models.Model):
author = foreign_key(User, related_name="posts", on_delete=models.CASCADE)
title = char_field()
content ........

因此,有了这个相关的名称,你也可以从用户反转到它的帖子!。在你的模板中这样做:

<a href={{ post.author.get_absolute_url }} target="_blank">{{ post.author }}</a>

如果您正确安排了url模式,这个链接将把用户重定向到posts-author面板。

然后,为了对作者的帖子进行排序,你必须将dashboard_owner传递给模板,并使用这个名称,而不是通常指访问页面的request.user->user

{% for post in dash_owner.posts.all %}
<li> <a href="{{ post.get_abslute_url }}" target="_blink"> 
{{ post.title }} </a> </li>
{% endfor %}

视图.py

def dashboard(request, owner_id=None)
if owner_id:
dash_owner = get_or_404(User, id=owner_id)
elif request.user.is_authenticated:
dash_owner = User.objectd.get(id=request.user.id)
return render(request, 'dashboard.html', {'dash_owner': dash_owner})

在urls.py->urlpatters:

path('dashboard/<int:owner_id>/', views.dashboard, name="dashboard")

这就是背后的想法,但为了获得更好的结果,你可能需要清楚地定义用户模型的get_absolute_url,给你一个与匹配的url

'dashboard/<int:id/'

或者另一种方法是这样做:

<a href="{% url 'dashboard' post.author.id %}"> {{ post.author }} </a>

相关内容

最新更新