2013-08-18 19 views
0

我想提出一個黑客新聞克隆在Django作爲一個TUTS +課程[Git Repo]Django的 - 通過ManyToManyKey

views.py文件中,投票視圖訪問來自django.contrib中的User類模型,我嘗試使用此代碼通過檢查用戶是否已經喜歡該故事來增加安全性。

@login_required 
def vote(request): 
    story = get_object_or_404(Story, pk=request.POST.get('story')) 
    user = request.user 
    if user.is_authenticated() and story not in user.liked_stories: 
     story.points += 1 
     story.save() 
     user.liked_stories.add(story) 
     user.save() 
    return HttpResponse() 

但它給我這個錯誤:

NameError: global name 'liked_stories' is not defined 
[18/Aug/2013 19:26:43] "POST /vote/ HTTP/1.1" 500 11148 

我能夠在index鑑於vote視圖中使用user.liked_stories爲什麼不呢?

錯誤:

Internal Server Error: /vote/ 
Traceback (most recent call last): 
    File "/home/sourabh/.virtualenvs/django/local/lib/python2.7/site-packages/django/core/handlers/base.py", line 115, in get_response 
    response = callback(request, *callback_args, **callback_kwargs) 
    File "/home/sourabh/.virtualenvs/django/local/lib/python2.7/site-packages/django/contrib/auth/decorators.py", line 25, in _wrapped_view 
    return view_func(request, *args, **kwargs) 
    File "/home/sourabh/Code/django_apps/HackerNews/stories/views.py", line 53, in vote 
    if user.is_authenticated() and story not in liked_stories: 
NameError: global name 'liked_stories' is not defined 
[18/Aug/2013 20:08:35] "POST /vote/ HTTP/1.1" 500 11161 
+0

錯誤說全局名'liked_stories'沒有定義,好像你的腳本在別的地方使用這個未定義的變量?那麼哪一行代碼會引發錯誤? – Jingo

+0

你發佈的代碼不會給這個錯誤。你必須自己引用'liked_stories',而不需要通過'user'。 –

+0

它在'user.liked_stories'部分。如果我刪除'和故事不在user.liked_stories',一切工作正常。我添加了完整的錯誤。 – Sourabh

回答

0

你去那裏:

if user.is_authenticated() and story not in liked_stories: 

在該行的錯誤被拋出。您發佈的代碼與您正在執行的代碼不相似。

+0

我已經知道這部分是造成這個問題的原因(請參閱我上面的評論)。 Git Repo是Tuts +不是我的,我試圖改進投票視圖,但我無法訪問likes_stories,它說它沒有定義。 – Sourabh

+1

我只能看到你的發佈代碼不是你正在執行的代碼,它們有所不同... – Jingo

+0

代碼[here](https://raw.github.com/croach/tutsplus-django/master/stories/ views.py)確實有效,與我發佈的不同。我將'view(request)'替換爲我發佈的代碼的鏈接,並且它不起作用,並且發佈了我發佈的錯誤。我想知道如何解決錯誤。 – Sourabh