Django - 显示用户创建的所有产品

时间:2017-10-31 03:19:46

标签: python django permissions views

我已经构建了一个产品应用,其中登录用户可以通过填写表单来创建产品。有一个产品页面列出了所有用户创建的所有产品。当用户点击个人资料链接时,他们会看到他们创建的产品列表。当用户登录时,他们的用户名出现在导航栏中(这将与此帖后面的内容相关)。

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

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>

这是导航栏的屏幕截图 - 请注意我还没有登录应用,但是个人资料名称显示了。

enter image description here

编辑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})

2 个答案:

答案 0 :(得分:0)

  1. get_object_or_404(User.objects更改为get_object_or_404(User
  2. url(r'^designs_by/(\w+)/$'更改为url(r'^designs_by/(?P<username>\w+)/$'
  3. 表示模板;

    <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>
    

答案 1 :(得分:0)

我收回了 - 这不起作用 - 我又回来了。

我将导航栏右侧代码更改为此并且它有效。正是这个匿名部分正在扼杀这个过程。

<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>