2015-10-28 12 views
0

我總是得到這樣的錯誤:這是爲什麼每次我註銷,然後登錄再次的PK變得沒有在Django

反向的「USER_HOME」與參數「()」和關鍵字參數「{u'pk」 :無}'找不到。 1模式嘗試:['ibs /(?P [0-9] +)/ home/$']

在我的模板中我可以顯示我的user.pk(它等於1)我使用它並在我的意見中傳遞它我得到了上面的錯誤(pk:none)。我已閱讀了關於此的一些線程。有些是因爲url模式,但我改變並檢查我的url,但沒有發生任何事情。仍然有錯誤。

這是我的網址:

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

views.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') 

我有什麼錯?我將所有必要的數據從視圖傳遞到模板。

+0

你使用的是Django的認證系統嗎?我覺得你寫的很多東西可能不那麼複雜。 – onyeka

回答

0

當用戶未登錄時user很可能是models.AnonymousUser,它沒有主鍵。

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

如果用戶沒有登錄,那麼你可能不希望他們看到該模板在所有。將它們重定向到視圖中的登錄頁面,或者檢查用戶在模板中是不是匿名的。

+0

但問題是,當我再次成功登錄時,user.pk在我將其從模板傳遞到視圖時變爲無。 – leprechaun

+0

在視圖中打印出用戶對象,是否與登錄的用戶相同?視圖是什麼樣的? –

+0

我編輯了我的帖子。我把我的views.py。是的,它是同一個用戶。 – leprechaun

相關問題