【问题标题】:how do i create a profile page that shows all users post to the user and to other users我如何创建一个显示所有用户发布给用户和其他用户的个人资料页面
【发布时间】:2020-06-05 09:02:09
【问题描述】:

我是 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 %}

这是我的帐户/urls.py

urls.py

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

【问题讨论】:

    标签: django django-models django-views django-templates


    【解决方案1】:

    您应该可以通过多种方式轻松做到这一点。

    制作这样的帖子模型:

    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 模式,此链接会将用户重定向到帖子作者仪表板。

    然后为了对作者的帖子进行排序,您必须将 dashboard_owner 传递给模板并使用此名称而不是 user,后者通常会引用 request.user -> 正在访问该页面的用户

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

    在views.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 -> urlpatterns:

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

    这就是背后的想法,但是为了获得更好的结果,您可能需要明确定义 User 模型的 get_absolute_url ,以便为您提供匹配的 url

    'dashboard/<int:id/'
    

    或者用另一种方式代替,这样做:

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

    【讨论】:

    • 我如何从视图中的数据库中查询帖子我有点卡在那里
    • 您好,我编辑了答案,并且我应该告诉您是否通过 login_required 装饰器限制视图,那么不是每个人都可以访问其他用户的仪表板!
    • 请问我可以将文件转发给您,以便您预览并了解最佳做法吗?
    • 不幸的是我是 django 的新手,所以我不熟悉它的最佳实践
    猜你喜欢
    • 2021-03-09
    • 1970-01-01
    • 2016-06-26
    • 2015-03-06
    • 2019-11-29
    • 1970-01-01
    • 2018-12-09
    • 2015-10-06
    • 1970-01-01
    相关资源
    最近更新 更多