【问题标题】:Django - display all products created by a userDjango - 显示用户创建的所有产品
【发布时间】:2017-10-31 03:19:46
【问题描述】:

我已经构建了一个产品应用程序,登录用户可以通过填写表格来创建产品。有一个产品页面,列出了所有用户创建的所有产品。当用户单击配置文件链接时,他们将看到他们创建的产品列表。当用户登录时,他们的用户名会出现在导航栏中(这将在本文后面进一步相关)。

我想创建一个页面,访问者可以在其中按用户查看产品。我创建了这个视图:

def designs_by(request, username):
    user = get_object_or_404(User.objects, username=username)
    products = Product.objects.filter(user=user)
    return render(request, 'designs_by.html', {'user':user,'products': products})

使用这个网址:

url(r'^designs_by/(\w+)/$', views.designs_by, name='designs_by'),

这在大多数情况下都有效,但是当访问者单击链接以查看用户的产品时,用户个人资料链接会出现在导航栏中。该链接不起作用,但我不知道它为什么会出现。是的,一个奇怪的。

编辑:这是显示登录/配置文件/注销功能的右侧导航栏的代码:

<ul class="navbar-nav navbar-right">
    {% if user.is_authenticated %}
            <li><a class="navbar-text navbar-right" href="{% url 'profile' user.username %}">
    {% if user.first_name and user.last_name %} {{user.first_name}} {{user.last_name}} {% else %} {{ user.username }} {% endif %} </a></li>
            <li><a class="navbar-text navbar-right" href="{% url 'Logout' %}">&nbsp;Logout </a></li>
    {% else %}
            <li><a class="navbar-text navbar-right" href="{% url 'Login' %}">Login </a></li>
    {% endif %}
</ul>

这是导航栏的屏幕截图 - 请注意,我尚未登录应用程序,但显示的是个人资料名称。

编辑 2:这是个人资料视图:

def profile(request, username):
    user = get_object_or_404(User.objects, username=username)
    products = Product.objects.filter(user=user)
    if not request.user == user:
        return render(request, 'no.html')
    else:
        return render(request, 'profile.html', {'user':user,'products': products})

【问题讨论】:

    标签: python django permissions views


    【解决方案1】:
    1. get_object_or_404(User.objects 更改为get_object_or_404(User
    2. url(r'^designs_by/(\w+)/$' 更改为url(r'^designs_by/(?P&lt;username&gt;\w+)/$'

    用于模板;

    <ul class="navbar-nav navbar-right">
      {% if request.user.is_authenticated %}
        <li>
          <a class="navbar-text navbar-right" href="{% url 'profile' username=request.user.username %}">
            {% if request.user.first_name and request.user.last_name %}
              {{ request.user.first_name }} {{ request.user.last_name }}
            {% else %}
              {{ request.user.username }}
            {% endif %}
          </a>
        </li>
        <li><a class="navbar-text navbar-right" href="{% url 'Logout' %}">&nbsp;Logout </a></li>
      {% else %}
        <li><a class="navbar-text navbar-right" href="{% url 'Login' %}">Login </a></li>
      {% endif %}
    </ul>
    

    【讨论】:

    • 我根据您的回复进行了编辑(假设 get_object 语句中逗号后的详细信息相同)。同样的问题,用户配置文件链接与注销链接一起出现在导航栏中。我正在使用 调用用户名,因为 user.username 和 username 不起作用。
    • 请阅读文档如何在模板中使用 url。应该是href="{% url 'designs_by' username=product.user.username %}"
    • 谢谢 - 但是 - 同样的问题。
    • 即使用户未登录,用户配置文件的链接也会显示在导航栏中。
    • 我们不知道导航栏是如何工作的,因为我们没有它的代码。
    【解决方案2】:

    我收回了 - 这没有用 - 我又遇到了问题。

    我将导航栏右侧的代码更改为此,它工作。是匿名部分阻碍了这个过程。

    <ul class="navbar-nav navbar-right">
        {% if user.is_authenticated and user.is_anonymous %}
            <li><a class="navbar-text navbar-right" href="{% url 'profile' user.username %}">
                {% if user.first_name and user.last_name %} {{user.first_name}} {{user.last_name}} {% else %} {{ user.username }} {% endif %} </a></li>
            <li><a class="navbar-text navbar-right" href="{% url 'Logout' %}">&nbsp;Logout </a></li>
                {% else %}
            <li><a class="navbar-text navbar-right" href="{% url 'Login' %}">Login </a></li>
                {% endif %}
            </ul>
    

    【讨论】:

      猜你喜欢
      • 2015-02-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-16
      • 1970-01-01
      • 2023-01-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多