【问题标题】:DJANGO - accesing some user's profileDJANGO - 访问一些用户资料
【发布时间】:2020-05-03 04:20:00
【问题描述】:

我正在开发网络应用程序,目前我正在开发配置文件部分。我已经写了一部分来查看某人的个人资料,这基本上可以正常工作,除了一件事。我可以打开某人的个人资料,但是当我单击重定向到个人资料不同部分的选项卡时(这些部分包含在块中以保留个人资料的主要信息),我的代码会立即切换到当前登录的用户。有什么方法可以根据 cookie 获取用户?

这是单个广告:

def view_advert(request, pk, title):
    advert = Advert.objects.get(pk=pk)
    return render(request, "advert.html", {'advert':advert})

html

<small>from </small><a href="{% url 'profile' nick=advert.user.username %}">{{advert.user}}</a>

我打开发布广告的人的个人资料(有效)

这是个人资料和标签之一:

@login_required
def profile(request, nick):
    user = User.objects.get(username=nick)
    user_profile = Profile.objects.get(user=user)
    return render(request, "users_templates/profile.html", {"user_profile":user_profile})

def profile_adverts(request, user):
    user = User.objects.get(username=user)
    adverts = Advert.objects.filter(user=user)
    context = {
        "objects":adverts,
        "no_data":"No other adverts",
        "user":user
    }
    return render(request, "profile_templates/general_list.html", context)

来自 profile.html 的 html 以访问选项卡:

<a class="nav-link" href="{% url 'all_adverts' user=user %}" role="tab" aria-selected="false">All adverts</a>

感谢您的帮助。

编辑@revliscano

general_list.html

{% extends "users_templates/profile.html" %}
{% load crispy_forms_tags %}
{% load static %}
{% block adverts %}
    {% if objects|length > 0 %}
        {% for object in objects %}
            <div class="work-container">
                <h3>{{object.title}}</h3>
                <h4><i class="far fa-calendar-alt"></i>Jan 2017 to <span class="badge badge-info">Current</span></h4>
                <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
            </div>
        {% endfor %}
    {% else %}
        <div class="work-container">
            <h3>{{no_data}}</h3>
        </div>
    {% endif %}
{% endblock adverts %}

个人资料html:

{% extends "main.html" %}
{% load crispy_forms_tags %}
{% load static %}
{% block content %}
<div class="row mt-5">
    <div class="row">
        <div class="col-lg-3 ">
            <div class="card left-profile-card">
                <div class="card-body">
                    <div class="text-center">
                        <img src="{{user_profile.avatar.url}}" alt="" class="user-profile">
                        <h3>{{user_profile.user.username}}</h3>
                        <p>World of Internet</p>
                        <div class="d-flex align-items-center justify-content-center mb-3">
                            <i class="fas fa-star text-info"></i>
                            <i class="fas fa-star text-info"></i>
                            <i class="fas fa-star text-info"></i>
                            <i class="fas fa-star text-info"></i>
                            <i class="fas fa-star text-info"></i>
                        </div>
                    </div>
                    <div class="personal-info">
                        <h3>Personal Information</h3>
                        <ul class="personal-list">
                            <li><i class="fas fa-briefcase "></i><span>Web Designer</span></li>
                            <li><i class="fas fa-map-marker-alt "></i><span> New York</span></li>
                            <li><i class="far fa-envelope "></i><span>like @example.com</span></li>
                            <li><i class="fas fa-mobile "></i><span>1234564343</span></li>
                        </ul>
                    </div>
                </div>
            </div>
        </div>
        <div class="col-lg-9">
            <div class="card right-profile-card">
                <div class="card-header alert-primary">
                    <ul class="nav nav-pills" id="pills-tab" role="tablist">
                        <li class="nav-item">
                            <a class="nav-link" href="#" role="tab" aria-selected="false">Comments</a>
                        </li>
                        <li class="nav-item">
                            <a class="nav-link" href="#" role="tab" aria-selected="false">All adverts</a>
                        </li>
                        <li class="nav-item">
                            <a class="nav-link" href="#" role="tab" aria-selected="false">Timeline</a>
                        </li>
                        <li class="nav-item">
                            <a class="nav-link" href="#" role="tab" aria-selected="false">Document</a>
                        </li>
                        <li class="nav-item">
                            <a class="nav-link" href="#" role="tab" aria-selected="false">Event</a>
                        </li>
                    </ul>
                </div>
                <div class="card-body">
                    <div class="tab-content" id="pills-tabContent">
                        <div class="tab-pane fade show active" id="pills-home" role="tabpanel" aria-labelledby="pills-home-tab">
                            {% block adverts %}
                            {% endblock adverts %}
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
{% endblock %}

【问题讨论】:

  • 为什么有href="{% url 'all_adverts' user=user %}" 作为标签?我觉得应该是href="#"吧?
  • @revliscano 说选项卡我的意思是按钮将您重定向到另一个部分
  • 好的。处理all_adverts的视图是什么?
  • @revliscano profile_adverts 我在上面链接了

标签: python django web


【解决方案1】:

对于 profile.html,您在上下文数据中将用户配置文件作为 user_profile 传递,但在这里 href="{% url 'all_adverts' user=user %}" 您将其称为 user(默认情况下与request.user相同,即认证用户)。

尝试改变它

<a class="nav-link" href="{% url 'all_adverts' user=user_profile.user.username %}" role="tab" aria-selected="false">All adverts</a>

【讨论】:

猜你喜欢
相关资源
最近更新 更多
热门标签