Как создать страницу профиля, в которой все пользователи публикуют сообщения для пользователей и других пользователей? - PullRequest
0 голосов
/ 21 февраля 2020

я новичок в Django и пытаюсь создать блог-сайт, где пользователи могут регистрироваться и публиковать статьи, но моя проблема заключается в том, как я могу отобразить сообщение пользователя на странице профиля пользователя, чтобы когда другие пользователи читали сообщение нажимает на имя автора, оно перенаправляет их на страницу профиля post.author's с указанием недавнего сообщения post.author's, а не сообщения request.user's. вот мой код.

вот это account / 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'),
]

1 Ответ

0 голосов
/ 21 февраля 2020

Вы должны быть в состоянии сделать это, легко и множеством способов.

создайте модель поста, подобную этой:

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 для шаблона и используйте это имя вместо пользователя, который обычно ссылается на 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")

это идея, лежащая в основе этого, но для получения лучшего результата вам может понадобиться четко определить get_absolute_url модели User, чтобы дать вам url, который использует на

'dashboard/<int:id/'

или вместо этого, сделайте следующее:

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