Skip to content
This repository was archived by the owner on Sep 3, 2020. It is now read-only.

Commit c44c900

Browse files
author
Arjun
committed
v0.2
Vote Answers
1 parent 00a7825 commit c44c900

File tree

11 files changed

+125
-9
lines changed

11 files changed

+125
-9
lines changed

db.sqlite3

0 Bytes
Binary file not shown.

qa/migrations/0008_answer_votes.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
# -*- coding: utf-8 -*-
2+
from __future__ import unicode_literals
3+
4+
from django.db import models, migrations
5+
6+
7+
class Migration(migrations.Migration):
8+
9+
dependencies = [
10+
('qa', '0007_answer_pub_date'),
11+
]
12+
13+
operations = [
14+
migrations.AddField(
15+
model_name='answer',
16+
name='votes',
17+
field=models.IntegerField(default=0),
18+
preserve_default=True,
19+
),
20+
]
842 Bytes
Binary file not shown.

qa/models.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ def __unicode__(self):
3434
class Answer(models.Model):
3535
question = models.ForeignKey(Question)
3636
answer_text = models.CharField(max_length=200)
37+
votes = models.IntegerField(default=0)
3738
pub_date = models.DateTimeField('date published')
3839
user_data = models.ForeignKey(UserProfile)
3940
def __str__(self):

qa/models.pyc

64 Bytes
Binary file not shown.

qa/templates/qa/detail.html

Lines changed: 37 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,27 +3,59 @@
33
{% bootstrap_css %}
44
{% bootstrap_javascript %}
55

6+
<link href='http://fonts.googleapis.com/css?family=Lobster' rel='stylesheet' type='text/css'>
7+
8+
<style>
9+
cool {
10+
font-family: 'Lobster', cursive;
11+
}
12+
</style>
13+
614
<div class="container">
715
<div class="page-header">
816
<h1><a href="/">Simple QA </a><small>Open Questions</small></h1>
917
</div>
1018

1119
<div class="jumbotron">
12-
<h2>Q: {{ question.question_text }}</h2>
20+
<p class="pull-right">{{ question.pub_date }}</p>
21+
<h2><cool>Q: {{ question.question_text }}</cool></h2>
1322
<p><a class="btn btn-primary btn-sm pull-right" href="/answer/{{ question.id }}" role="button">Answer this Question!</a></p>
1423
</div>
1524

16-
{% if question.answer_set.count %}
25+
{% if answers %}
1726
<div class="panel panel-success">
1827
<div class="panel-heading">
19-
<h3 class="panel-title">There are {{ question.answer_set.count }} Answers</h3>
28+
<h3 class="panel-title">There are {{ answers.count }} Answers</h3>
2029
</div>
2130
<div class="panel-body">
22-
{% for answer in question.answer_set.all %}
23-
<div class="alert alert-info" role="alert">{{ answer.answer_text }}<small class="pull-right">- <b>{{ answer.user_data.user.username }}</b> ({{ answer.pub_date }})</small></div>
31+
{% for answer in answers %}
32+
<div class="row">
33+
{% if user.is_authenticated %}
34+
<div class ="col-md-1"><h3><a href="/vote/{{ answer.id }}/{{ question.id }}/0/"><span class="glyphicon glyphicon-plus" aria-hidden="true"></span></a> {{ answer.votes }} <a href="/vote/{{ answer.id }}/{{ question.id }}/1/"><span class="glyphicon glyphicon-minus" aria-hidden="true"></span></a></h3></div>
35+
{% endif %}
36+
<div class ="col-md-8"><div class="alert alert-info" role="alert">{{ answer.answer_text }}</div></div>
37+
<div class ="col-md-3"><p class="pull-right">- <b>{{ answer.user_data.user.username }}</b> ({{ answer.pub_date }})</p></div>
38+
</div>
2439
{% endfor %}
2540
</div>
2641
</div>
42+
43+
<div class="pagination">
44+
<span class="step-links">
45+
{% if answers.has_previous %}
46+
<a href="?page={{ answers.previous_page_number }}">previous</a>
47+
{% endif %}
48+
49+
<span class="current">
50+
Page {{ answers.number }} of {{ answers.paginator.num_pages }}.
51+
</span>
52+
53+
{% if answers.has_next %}
54+
<a href="?page={{ answers.next_page_number }}">next</a>
55+
{% endif %}
56+
</span>
57+
</div>
58+
2759
{% else %}
2860
<center><p>This question is still open, <a href="/answer/{{ question.id }}" role="button">Write answer!</a></p></center>
2961
{% endif %}

qa/templates/qa/index.html

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,15 @@
33
{% bootstrap_css %}
44
{% bootstrap_javascript %}
55

6+
<link href='http://fonts.googleapis.com/css?family=Roboto:300' rel='stylesheet' type='text/css'>
7+
8+
<style>
9+
.ques {
10+
font-family: 'Roboto', sans-serif;
11+
font-size: 25px;
12+
}
13+
</style>
14+
615
<div class="container">
716
<div class="page-header">
817
<a class="btn btn-danger pull-right" href="/add/">Ask Question</a><h1><a href="/">Simple QA </a><small>Open Questions</small></h1>
@@ -11,7 +20,7 @@
1120
{% if questions %}
1221
<ul>
1322
{% for question in questions %}
14-
<li><a href="/q/{{ question.id }}/">{{ question.question_text }}</a><small class="pull-right"> {{ question.pub_date}}</small></li>
23+
<li><a class="ques" href="/q/{{ question.id }}/">{{ question.question_text }}</a><small class="pull-right"> {{ question.pub_date}}</small></li>
1524
{% endfor %}
1625
</ul>
1726

qa/views.py

Lines changed: 56 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -47,9 +47,22 @@ def add(request):
4747
def detail(request, question_id):
4848
try:
4949
question = Question.objects.get(pk=question_id)
50+
answer_list = question.answer_set.order_by('-votes')
51+
52+
paginator = Paginator(answer_list, 10)
53+
page = request.GET.get('page')
54+
try:
55+
answers = paginator.page(page)
56+
except PageNotAnInteger:
57+
# If page is not an integer, deliver first page.
58+
answers = paginator.page(1)
59+
except EmptyPage:
60+
# If page is out of range (e.g. 9999), deliver last page of results.
61+
answers = paginator.page(paginator.num_pages)
62+
5063
except Question.DoesNotExist:
5164
raise Http404("Question does not exist")
52-
return render(request, 'qa/detail.html', {'question': question})
65+
return render(request, 'qa/detail.html', {'answers': answers, 'question': question}, )
5366

5467
def answer(request, question_id):
5568
try:
@@ -72,13 +85,53 @@ def add_answer(request):
7285
return render(request, 'qa/answer.html', {'question': question, 'message': 'Empty'})
7386

7487
a = Answer()
88+
pub_date = datetime.datetime.now()
7589
a.answer_text = answer_text
7690
a.question = question
7791
a.user_data = user
92+
a.pub_date = pub_date
7893
a.save()
79-
return render(request, 'qa/detail.html', {'question': question})
8094

81-
return render(request, 'qa/answer.html', {'question': question})
95+
answer_list = question.answer_set.order_by('-votes')
96+
97+
paginator = Paginator(answer_list, 10)
98+
page = request.GET.get('page')
99+
try:
100+
answers = paginator.page(page)
101+
except PageNotAnInteger:
102+
# If page is not an integer, deliver first page.
103+
answers = paginator.page(1)
104+
except EmptyPage:
105+
# If page is out of range (e.g. 9999), deliver last page of results.
106+
answers = paginator.page(paginator.num_pages)
107+
108+
return render(request, 'qa/detail.html', {'question': question, 'answers': answers})
109+
110+
return render(request, 'qa/detail.html', {'question': question})
111+
112+
def vote(request, answer_id, question_id, op_code):
113+
answer = Answer.objects.get(pk=answer_id)
114+
if op_code == '0':
115+
answer.votes += 1
116+
if op_code == '1':
117+
answer.votes -= 1
118+
answer.save()
119+
question = Question.objects.get(pk=question_id)
120+
121+
answer_list = question.answer_set.order_by('-votes')
122+
123+
paginator = Paginator(answer_list, 10)
124+
page = request.GET.get('page')
125+
try:
126+
answers = paginator.page(page)
127+
except PageNotAnInteger:
128+
# If page is not an integer, deliver first page.
129+
answers = paginator.page(1)
130+
except EmptyPage:
131+
# If page is out of range (e.g. 9999), deliver last page of results.
132+
answers = paginator.page(paginator.num_pages)
133+
134+
return render(request, 'qa/detail.html', {'question': question, 'answers': answers})
82135

83136
from qa.forms import UserForm, UserProfileForm
84137

qa/views.pyc

1.23 KB
Binary file not shown.

simpleqa/urls.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
url(r'^admin/', include(admin.site.urls)),
1212
url(r'^add/$', views.add, name='add'),
1313
url(r'^answer/$', views.add_answer, name='add_answer'),
14+
url(r'^vote/(?P<answer_id>\d+)/(?P<question_id>\d+)/(?P<op_code>\d+)/$', views.vote, name='vote'),
1415

1516
url(r'^register/$', views.register, name='register'),
1617
url(r'^login/$', views.user_login, name='login'),

0 commit comments

Comments
 (0)