为什么每次我注销,然后再次登录,pk在djang变成无

2024-05-04 22:39:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我总是遇到这样的错误:

参数为“()”且关键字参数为“{u'pk”:无}的“user\u home”的反转。已尝试1个图案:['ibs/(?P[0-9]+)/home/$']

在我的模板中,我可以显示我的用户.pk(它等于1)但是当我使用它并在我的视图中传递它时,我得到了上面的错误(pk:none)。我读过一些关于这个的文章。有些是因为网址模式,但我改变和检查我的网址,但什么也没有发生。还是会出错。你知道吗

这是我的网址:

from django.conf.urls import url
from . import views

urlpatterns = [
    url(r'^ibs/$', views.index, name='index'),
    url(r'^ibs/register/$', views.user_add, name='user_add'),
    url(r'^ibs/login/$', views.user_login, name='user_login'),
    url(r'^ibs/(?P<pk>[0-9]+)/home/$', views.user_home,      name='user_home'),
    url(r'^ibs/(?P<user_pk>[0-9]+)/logout/$', views.user_logout, name='user_logout'),
    url(r'^ibs/(?P<pk_item_add>[0-9]+)/additem/$', views.item_add, name='item_add'),
    url(r'^ibs/(?P<pk_item>[0-9]+)/viewitem/(?P<pk_user>[0-9]+)/$', views.item_detail, name='item_detail'),
]

我的模板:

{% block home %}
<li class="active"><a href="{% url "user_home" pk=user.pk %}">Home</a></li>
{% endblock home %}

{% block register %}
{% endblock register %}

{% block login %}
{% endblock login %}

{% block logout %}
<li>
    <a method="post" href="{% url "user_logout" user_pk=user.pk %}"><span class="glyphicon glyphicon-log-out"></span> Logout
</a>
</li>
{% endblock logout %}


{% block post %}
<li>
    <a method="post" href="{% url "item_add" pk_item_add=user.pk %}"> {{user.pk}}
</a>
</li>
{% endblock post %}

def user_login(request):
if request.method == "POST":
    #username is unique, get User where username is equal to requested username
    username = User.objects.get(username = request.POST['username'])

    if username.password == request.POST['password']:
        request.session['username'] = username.id
        return redirect('system.views.user_home', pk=username.id)
else:

return render(request, 'system/user_login.html')

你知道吗视图.py你知道吗

def user_home(request, pk):
    user = get_object_or_404(User, pk=pk)
    try:
        if request.session['username'] == user.pk:
            items = Item.objects.all()
            types = Type.objects.all()
            return render(request, 'system/user_home.html', {'user':user, 'types':types, 
                                                         'items': items})
        else:
            return redirect('system.views.user_login')

    except KeyError:
        return redirect('system.views.user_login')

def user_logout(request, user_pk):
    user = get_object_or_404(User, pk=user_pk)
    try:
        del request.session['username']
        return redirect('system.views.user_login')

    except KeyError:
        pass

    return redirect('system.views.user_login')

我哪里出错了?我将所有必要的数据从视图传递到模板。你知道吗


Tags: nameaddurlhomereturnrequestusernamelogin
1条回答
网友
1楼 · 发布于 2024-05-04 22:39:55

当用户没有登录时,user很可能是没有主键的models.AnonymousUser。你知道吗

https://docs.djangoproject.com/en/1.8/ref/contrib/auth/#anonymous-users

如果用户没有登录,那么您可能根本不希望他们看到该模板。将它们重定向到视图中的登录页,或者检查用户在模板中是否匿名。你知道吗

相关问题 更多 >