Skip to content

Commit 96325f8

Browse files
committed
end of episode 3
1 parent ec445dc commit 96325f8

11 files changed

Lines changed: 159 additions & 5 deletions

File tree

database.db

11 KB
Binary file not shown.

links/forms.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,13 @@
11
from django import forms
22
from .models import UserProfile
3+
from .models import Link
34

45
class UserProfileForm(forms.ModelForm):
56
class Meta:
67
model = UserProfile
78
exclude = ("user",)
9+
10+
class LinkForm(forms.ModelForm):
11+
class Meta:
12+
model = Link
13+
exclude = ("submitter", "rank_score")

links/models.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
from django.db import models
22
from django.contrib.auth.models import User
33
from django.db.models import Count
4+
from django.core.urlresolvers import reverse
45

56
class LinkVoteCountManager(models.Manager):
67
def get_query_set(self):
@@ -22,6 +23,9 @@ class Link(models.Model):
2223
def __unicode__(self):
2324
return self.title
2425

26+
def get_absolute_url(self):
27+
return reverse("link_detail", kwargs={"pk": str(self.id)})
28+
2529
class Vote(models.Model):
2630
voter = models.ForeignKey(User)
2731
link = models.ForeignKey(Link)

links/views.py

Lines changed: 37 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,49 @@
1-
from django.views.generic import ListView, DetailView
1+
from django.views.generic import ListView
2+
from django.views.generic import DetailView
23
from .models import Link, UserProfile
34
from .forms import UserProfileForm
5+
from .forms import LinkForm
6+
47
from django.contrib.auth import get_user_model
8+
from django.views.generic.edit import CreateView
59
from django.views.generic.edit import UpdateView
6-
from django.core.urlresolvers import reverse
10+
from django.views.generic.edit import DeleteView
11+
from django.core.urlresolvers import reverse, reverse_lazy
12+
13+
from django.contrib.comments.models import Comment
714

8-
class LinkListView(ListView):
15+
class RandomGossipMixin(object):
16+
def get_context_data(self, **kwargs):
17+
context = super(RandomGossipMixin, self).get_context_data(**kwargs)
18+
context[u"randomquip"] = Comment.objects.order_by('?')[0]
19+
return context
20+
21+
class LinkListView(RandomGossipMixin, ListView):
922
model = Link
1023
queryset = Link.with_votes.all()
1124
paginate_by = 5
1225

26+
class LinkDetailView(DetailView):
27+
model = Link
28+
29+
class LinkCreateView(CreateView):
30+
model = Link
31+
form_class = LinkForm
32+
33+
def form_valid(self, form):
34+
f = form.save(commit=False)
35+
f.rank_score = 0.0
36+
f.submitter = self.request.user
37+
f.save()
38+
return super(LinkCreateView, self).form_valid(form)
39+
40+
class LinkUpdateView(UpdateView):
41+
model = Link
42+
form_class = LinkForm
43+
44+
class LinkDeleteView(DeleteView):
45+
model = Link
46+
success_url = reverse_lazy("home")
1347

1448
class UserProfileDetailView(DetailView):
1549
model = get_user_model()

steelrumors/settings.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,7 @@
121121
'django.contrib.messages',
122122
'django.contrib.staticfiles',
123123
'django.contrib.admin',
124+
'django.contrib.comments',
124125
'registration',
125126

126127
'links',

steelrumors/templates/base.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ <h1>Steel Rumors</h1>
1313
<p>
1414
<a href="{% url 'home' %}">Home</a> |
1515
{% if user.is_authenticated %}
16+
<a href="{% url 'link_create' %}">Submit Link</a> |
1617
<a href="{% url 'logout' %}">Logout</a> |
1718
<a href="{% url 'profile' slug=user.username %}"><b>{{ user.username }}</b></a>
1819
{% else %}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
{% extends "base.html" %}
2+
3+
{% block content %}
4+
5+
<p>Are you sure you want to delete "{{ object.title }}"?</p>
6+
7+
<form method="post" action="{% url 'link_delete' pk=object.pk %}">
8+
{% csrf_token %}
9+
<a href="{% url 'link_detail' pk=object.pk %}">Go back</a>
10+
<p><input type="submit" value="Confirm deletion" /></p>
11+
</form>
12+
13+
{% endblock %}
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
{% extends "base.html" %}
2+
{% load comments %}
3+
4+
{% block content %}
5+
<style>
6+
#id_honeypot {
7+
display: none;
8+
}
9+
</style>
10+
11+
<h2><a href="{{ object.link }}">{{ object.title }}</a></h2>
12+
{% if object.submitter == user %}
13+
<a href="{% url 'link_update' pk=object.pk %}">Edit</a> |
14+
<a href="{% url 'link_delete' pk=object.pk %}">Delete</a>
15+
{% endif %}
16+
17+
<div class="desc">
18+
{{ object.description }}
19+
</div>
20+
21+
<div class="comments">
22+
<h3>Comments</h3>
23+
24+
<div class="comment_form">
25+
{% if user.is_authenticated %}
26+
{% get_comment_form for object as form %}
27+
<form action="{% comment_form_target %}" method="POST">
28+
{% csrf_token %}
29+
{{ form.comment }}
30+
{{ form.honeypot }}
31+
{{ form.content_type }}
32+
{{ form.object_pk }}
33+
{{ form.timestamp }}
34+
{{ form.security_hash }}
35+
<input type="hidden" name="name" value="{{ user }}" />
36+
<input type="hidden" name="email" value="{{ user.email|default:'d@ummy.com' }}" />
37+
<input type="hidden" name="url" value="" />
38+
<input type="hidden" name="next"
39+
value="{% url 'link_detail' pk=object.id %}" />
40+
<input type="submit" value="Add comment" id="id_submit" />
41+
</form>
42+
{% else %}
43+
<p>Please <a href="{% url 'login' %}">log in
44+
</a> to leave a comment.</p>
45+
{% endif %}
46+
</div>
47+
48+
49+
{% render_comment_list for object %}
50+
</div>
51+
52+
53+
{% endblock %}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
{% extends "base.html" %}
2+
3+
{% block content %}
4+
5+
<form method="post" action="">
6+
{% csrf_token %}
7+
{{ form.as_p }}
8+
<input type="submit" value="Add">
9+
</form>
10+
{% endblock %}
Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,30 @@
11
{% extends "base.html" %}
2+
{% load comments %}
3+
24
{% block content %}
5+
{% if is_paginated %}
6+
<ol start="{{ page_obj.start_index }}">
7+
{% else %}
38
<ol>
9+
{% endif %}
410
{% for link in object_list %}
511
<li> [{{ link.votes }}]
6-
<a href="{{ link.url }}">
12+
<a href="{% url 'link_detail' pk=link.pk %}">
713
<b>{{ link.title }}</b>
14+
{% get_comment_count for link as comment_count %}
15+
{{ comment_count }} comment{{ comment_count|pluralize }}
816
</a>
917
</li>
1018
{% endfor %}
1119
</ol>
20+
{% if is_paginated %}
21+
<div class="pagination">
22+
{% if page_obj.has_next %}
23+
<a href="?page={{ page_obj.next_page_number }}">More &raquo;</a>
24+
{% endif %}
25+
</div>
26+
{% endif %}
27+
<blockquote style="background-color: #ddd; padding: 4px; border-radius: 10px; margin: 10px 0; color: #666; font-size: smaller; text-shadow: rgba(255,255,255,0.8) 1px 1px 0;">
28+
{{ randomquip.comment|truncatechars:140 }}
29+
</blockquote>
1230
{% endblock %}

0 commit comments

Comments
 (0)