1
+ import settings
2
+
1
3
from django .http import Http404
2
4
from django .shortcuts import render , redirect , get_object_or_404
3
5
from django .core .urlresolvers import reverse , NoReverseMatch
@@ -27,13 +29,16 @@ def get_my_questions(request):
27
29
return None
28
30
else :
29
31
return Question .objects .can_view (request .user )\
30
- .filter (user = request .user )
32
+ .filter (user = request .user )
31
33
32
34
33
35
def knowledge_index (request ,
34
36
template = 'django_knowledge/index.html' ):
35
37
36
- questions = Question .objects .can_view (request .user )[0 :20 ]
38
+ questions = Question .objects .can_view (request .user )\
39
+ .prefetch_related ('responses__question' )[0 :20 ]
40
+ # this is for get_responses()
41
+ [setattr (q , '_requesting_user' , request .user ) for q in questions ]
37
42
38
43
return render (request , template , {
39
44
'request' : request ,
@@ -49,7 +54,8 @@ def knowledge_list(request,
49
54
Form = QuestionForm ):
50
55
51
56
search = request .GET .get ('title' , None )
52
- questions = Question .objects .can_view (request .user )
57
+ questions = Question .objects .can_view (request .user )\
58
+ .prefetch_related ('responses__question' )
53
59
54
60
if search :
55
61
questions = questions .filter (
@@ -61,8 +67,11 @@ def knowledge_list(request,
61
67
category = get_object_or_404 (Category , slug = category_slug )
62
68
questions = questions .filter (categories = category )
63
69
64
- paginator , questions = paginate (questions , 50 ,
65
- request .GET .get ('page' , '1' ))
70
+ paginator , questions = paginate (questions ,
71
+ 50 ,
72
+ request .GET .get ('page' , '1' ))
73
+ # this is for get_responses()
74
+ [setattr (q , '_requesting_user' , request .user ) for q in questions ]
66
75
67
76
return render (request , template , {
68
77
'request' : request ,
@@ -80,10 +89,16 @@ def knowledge_thread(request,
80
89
slug = None ,
81
90
template = 'django_knowledge/thread.html' ,
82
91
Form = ResponseForm ):
83
-
84
- question = get_object_or_404 (
85
- Question .objects .can_view (request .user ),
86
- id = question_id )
92
+
93
+ try :
94
+ question = Question .objects .can_view (request .user )\
95
+ .get (id = question_id )
96
+ except Question .DoesNotExist :
97
+ if Question .objects .filter (id = question_id ).exists () and \
98
+ hasattr (settings , 'LOGIN_REDIRECT_URL' ):
99
+ return redirect (settings .LOGIN_REDIRECT_URL )
100
+ else :
101
+ raise Http404
87
102
88
103
responses = question .get_responses (request .user )
89
104
0 commit comments