Как сделать ссылку на профиль другого пользователя в django? - PullRequest
3 голосов
/ 26 апреля 2020

Я пытался щелкнуть по автору поста (пользователю, создавшему пост). Я хочу, чтобы он перенаправил меня в профиль этого пользователя, например, в Instagram, когда вы щелкаете пользователя, который находится вверху поста. он перенаправляет вас в свой профиль. Каждый раз, когда я делаю это, вместо того, чтобы видеть профиль автора сообщения, я вижу зарегистрированный профиль пользователя. Я думаю, что-то не так в файле views.py или в базе. html.

views.py

    def profile(request, pk=None):
        if pk:
            user = get_object_or_404(User, pk=pk)
        else:
            user = request.user
        args = {'user': user}
        return render(request, 'profile.html', args)

    def home(request):
        created_posts = Create.objects.all().order_by("-added_date")
        return render(request, 'base.html', {"created_posts": created_posts})

    def create(request):
        if request.method == 'POST':
            created_date = timezone.now()
            header1 = request.POST['header']
            content1 = request.POST['content']
            user = request.user
            created_obj = Create.objects.create(added_date=created_date, title=header1, content=content1, user=user)
            created_obj.save()
            print('create created')
            return redirect('home')
        else:
            print('create not created')
            return render(request, 'create.html')

models.py

    class Create(models.Model):
        added_date = models.DateTimeField()
        title = models.CharField(max_length=200)
        content = models.CharField(max_length=200)
        user = models.ForeignKey(User, related_name='user', on_delete=models.CASCADE, default=1)

    class Profile(models.Model):
        user = models.OneToOneField(User, on_delete=models.CASCADE)
        image = models.ImageField(default='default.jpg', upload_to='profile_pics')

    def __str__(self):
        return f'{self.user.username} Profile'

urls.py

    urlpatterns = [
        path('', views.home, name='home'),
        path('profile', views.profile, name='profile'),
        path('profile/<int:pk>/', views.profile, name='profile_pk'),
        path('create', views.create, name='create'),
    ]

профиль. html (показывает профиль пользователя)

    {% extends 'home.html' %}
    {% block body%}
    <div class="content-section">
      <div class="media">
        <img class="rounded-circle account-img" src="{{ user.profile.image.url }}">
        <div class="media-body">
          <h2 class="account-heading">{{ user.username }}</h2>
          <p class="text-secondary">{{ user.email }}</p>
        </div>
      </div>
    </div>
    {% endblock %}

base. html (показывает все сообщения пользователя с именем пользователя)

    {% extends 'home.html' %}
    {% block body %}
      <ul action="{% url 'create' %}" class="container-sm list-group" style="margin-top: 200px;">
        {% for created_post in created_posts %}
        <li class="list-group-item">{{ created_post.title }}
          <a href="{% url 'profile_pk' pk=user.pk %}">{{ created_post.user }}</a>
          <p>{{ created_post.content }}</p>
          <div class="float-right">
            <form action="delete_create/{{ created_post.id }}/" action="post">
              <button type="submit" class="btn btn-outline-danger btn-sm">Delete</button>
            </form>
          </div>
          <div class="float-right">
            <a href="{% url 'edit' created_post.id %}" class="btn btn-outline-warning btn-sm" style="margin-right: 5px;" role="button">Edit</a>
          </div>
        </li>     
       {% endfor %}            
     </ul>
     {% endblock %}

home. html (навигационная панель, отображающая зарегистрированного пользователя)

image

1 Ответ

2 голосов
/ 26 апреля 2020

В вашем base.html изменении файла

<a href="{% url 'profile_pk' pk=user.pk %}">{{ created_post.user }}</a>

с

<a href="{% url 'profile_pk' pk=created_post.user.pk %}">{{ created_post.user }}</a>

Поскольку вы должны передать идентификатор владельца сообщения на ваш взгляд. Когда вы используете только пользователя, django обнаруживает аутентифицированный пользовательский объект.

...