我已经构建了一个产品应用,其中登录用户可以通过填写表单来创建产品。有一个产品页面列出了所有用户创建的所有产品。当用户点击个人资料链接时,他们会看到他们创建的产品列表。当用户登录时,他们的用户名出现在导航栏中(这将与此帖后面的内容相关)。
我想创建一个访问者可以按用户查看产品的页面。我创建了这个视图:
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' %}"> 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})
答案 0 :(得分:0)
get_object_or_404(User.objects
更改为get_object_or_404(User
url(r'^designs_by/(\w+)/$'
更改为url(r'^designs_by/(?P<username>\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' %}"> 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' %}"> Logout </a></li>
{% else %}
<li><a class="navbar-text navbar-right" href="{% url 'Login' %}">Login </a></li>
{% endif %}
</ul>