Django ссылка на страницу профиля конкретного пользователя
У меня есть сайт социальной сети, который позволяет пользователю просматривать страницу профиля другого пользователя, щелкнув его имя пользователя в одном из его сообщений, которое появляется в разделе ленты на моей странице. Я создал представление view_profile, но мне нужно передать в представление имя пользователя нужного пользователя, чтобы показывать только сообщения, активность и т.д., сделанные этим конкретным пользователем. Как мне передать имя пользователя в представление?
view_profile.html
<section id="main_feed_section" class="feed_sections">
{% for post in posts %}
<div class="post_main_container">
<section class="post_title">
<h1> <a href="{% url 'view_profile' %}">{{ post.user_id.username }}</a>{{ post.title }}</h1>
</section>
<section class="post_main_body">
<p>{{ post.caption }}</p>
</section>
<section class="post_footer">
<p>{{ post.date_posted }}</p>
</section>
</div>
{% endfor %}
</section>
views.py
def view_profile(request):
account = "logan9997" #if a post made by logan9997 was clicked
posts = [post for post in Posts.objects.all()
if post.user_id.username == account]
followers = [follower for follower in Relationships.objects.all()
if follower.acc_followed_id.username == account]
context = {
"title":account,
"posts":posts,
"followers":followers
}
return render(request, "myApp/view_profile.html", context)
Добавьте переменную к вашему представлению:
def view_profile(request, account):
...
И урлы:
path('view_profile/<str:account>', ...)
Затем вы можете перейти к url: localhost:8000/view_profile/logan9997
.
Вы можете сделать это лучше с помощью User
id:
path('view_profile/<int:pk>', ...)
def view_profile(request, pk):
account = User.objects.get(id=pk).username
...
И идите: localhost:8000/view_profile/1
Это очень не в стиле Django:
posts = [post for post in Posts.objects.all()
if post.user_id.username == account]
Вместо этого используйте метод filter()
:
posts = Posts.objects.filter(user_id__username=account)
# and
followers = Relationships.objects.filter(acc_followed_id__username=account)