1 |
commit: da9ac5b7a7b636fdf67a528386e676ee95c10e9a |
2 |
Author: Slava Bacherikov <slava <AT> bacher09 <DOT> org> |
3 |
AuthorDate: Thu Jun 28 22:45:14 2012 +0000 |
4 |
Commit: Slava Bacherikov <slava <AT> bacherikov <DOT> org <DOT> ua> |
5 |
CommitDate: Thu Jun 28 22:45:14 2012 +0000 |
6 |
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/gentoo-packages.git;a=commit;h=da9ac5b7 |
7 |
|
8 |
Add PackageDetailView |
9 |
|
10 |
--- |
11 |
gpackages/apps/packages/models.py | 13 ++++++++ |
12 |
gpackages/apps/packages/urls.py | 7 ++++- |
13 |
gpackages/apps/packages/views.py | 50 +++++++++++++++++++++++++++++- |
14 |
gpackages/templates/package.html | 5 +++ |
15 |
gpackages/templates/package_object.html | 12 +++++++ |
16 |
gpackages/templates/packages.html | 12 +------ |
17 |
6 files changed, 86 insertions(+), 13 deletions(-) |
18 |
|
19 |
diff --git a/gpackages/apps/packages/models.py b/gpackages/apps/packages/models.py |
20 |
index aa7bd65..1e50175 100644 |
21 |
--- a/gpackages/apps/packages/models.py |
22 |
+++ b/gpackages/apps/packages/models.py |
23 |
@@ -316,6 +316,19 @@ class PackageModel(AbstractDateTimeModel): |
24 |
for ebuild in self.ebuilds: |
25 |
l.extend(ebuild.get_ebuilds_and_keywords(arch_list)) |
26 |
return l |
27 |
+ |
28 |
+ @models.permalink |
29 |
+ def get_absolute_url_by_pk(self): |
30 |
+ return ('package',(), {'pk': self.pk}) |
31 |
+ |
32 |
+ @models.permalink |
33 |
+ def get_absolute_url(self): |
34 |
+ # It coold been in many repositories |
35 |
+ kwargs = { 'category': self.virtual_package.category.category, |
36 |
+ 'name': self.virtual_package.name } |
37 |
+ if self.repository.name != 'gentoo': |
38 |
+ kwargs['repository'] = self.repository.name |
39 |
+ return ('package',(), kwargs ) |
40 |
|
41 |
class Meta: |
42 |
unique_together = ('virtual_package', 'repository') |
43 |
|
44 |
diff --git a/gpackages/apps/packages/urls.py b/gpackages/apps/packages/urls.py |
45 |
index 569417e..3744802 100644 |
46 |
--- a/gpackages/apps/packages/urls.py |
47 |
+++ b/gpackages/apps/packages/urls.py |
48 |
@@ -1,7 +1,7 @@ |
49 |
from django.conf.urls import patterns, include, url |
50 |
from views import CategoriesListView, HerdsListView, MaintainersListView, \ |
51 |
RepositoriesListView, LicenseGroupsView , EbuildsListView, \ |
52 |
- PackagesListsView |
53 |
+ PackagesListsView, PackageDetailView |
54 |
|
55 |
urlpatterns = patterns('', |
56 |
url(r'^categories/$', CategoriesListView.as_view(), name = 'categories'), |
57 |
@@ -11,4 +11,9 @@ urlpatterns = patterns('', |
58 |
url(r'^license-groups/$', LicenseGroupsView.as_view(), name = 'license_groups'), |
59 |
url(r'^$', EbuildsListView.as_view(), name = 'ebuilds'), |
60 |
url(r'^packages/$', PackagesListsView.as_view(), name = 'packages'), |
61 |
+ |
62 |
+ # In Future I will write my onw URL Resolver !!! |
63 |
+ #url(r'^package/(?:(?P<pk>\d+)|(?P<category>[^/]+)/(?P<name>[^/]+))/$', PackageDetailView.as_view(), name = 'package'), |
64 |
+ url(r'^package/(?P<pk>\d+)/$', PackageDetailView.as_view(), name = 'package'), |
65 |
+ url(r'^package/(?P<category>[^/]+)/(?P<name>[^/:]+)(::(?P<repository>[^/]+))?/$', PackageDetailView.as_view(), name = 'package'), |
66 |
) |
67 |
|
68 |
diff --git a/gpackages/apps/packages/views.py b/gpackages/apps/packages/views.py |
69 |
index 4639555..98672d4 100644 |
70 |
--- a/gpackages/apps/packages/views.py |
71 |
+++ b/gpackages/apps/packages/views.py |
72 |
@@ -1,8 +1,11 @@ |
73 |
-from generic.views import ContextListView, ContextTemplateView |
74 |
+from django.views.generic import DetailView |
75 |
+from generic.views import ContextListView, ContextTemplateView, ContextView |
76 |
from models import CategoryModel, HerdsModel, MaintainerModel, \ |
77 |
RepositoryModel, LicenseGroupModel, EbuildModel, \ |
78 |
PackageModel |
79 |
|
80 |
+from django.shortcuts import get_object_or_404 |
81 |
+ |
82 |
class CategoriesListView(ContextListView): |
83 |
extra_context = {'page_name': 'Categories',} |
84 |
template_name = 'categories.html' |
85 |
@@ -52,5 +55,48 @@ class PackagesListsView(ContextListView): |
86 |
template_name = 'packages.html' |
87 |
context_object_name = 'packages' |
88 |
queryset = PackageModel.objects.all(). \ |
89 |
- select_related('virtual_package', 'virtual_package__category'). \ |
90 |
+ select_related('virtual_package', |
91 |
+ 'virtual_package__category', |
92 |
+ 'repository'). \ |
93 |
+ defer('repository__description', |
94 |
+ 'repository__owner_name', |
95 |
+ 'repository__owner_email', |
96 |
+ 'repository__homepage', |
97 |
+ 'repository__official', |
98 |
+ 'repository__quality', |
99 |
+ 'changelog'). \ |
100 |
prefetch_keywords(arches) |
101 |
+ |
102 |
+class PackageDetailView(ContextView, DetailView): |
103 |
+ arches = ['alpha', 'amd64', 'arm', 'hppa', 'ia64', 'ppc', 'ppc64', 'sparc', 'x86'] |
104 |
+ template_name = 'package.html' |
105 |
+ extra_context = {'page_name': 'Package', 'arches': arches} |
106 |
+ context_object_name = 'package' |
107 |
+ queryset = PackageModel.objects.all(). \ |
108 |
+ select_related('virtual_package', |
109 |
+ 'virtual_package__category', |
110 |
+ 'repository'). \ |
111 |
+ defer('repository__description', |
112 |
+ 'repository__owner_name', |
113 |
+ 'repository__owner_email', |
114 |
+ 'repository__homepage', |
115 |
+ 'repository__official', |
116 |
+ 'repository__quality', |
117 |
+ 'changelog'). \ |
118 |
+ prefetch_keywords(arches) |
119 |
+ |
120 |
+ def get_object(self, queryset = None): |
121 |
+ pk = self.kwargs.get('pk') |
122 |
+ if pk is not None: |
123 |
+ return super(PackageDetailView, self).get_object(queryset) |
124 |
+ if queryset is None: |
125 |
+ queryset = self.get_queryset() |
126 |
+ |
127 |
+ name, category = self.kwargs.get('name'), self.kwargs.get('category') |
128 |
+ repository = self.kwargs.get('repository') |
129 |
+ if repository is None: |
130 |
+ repository = 'gentoo' |
131 |
+ obj = get_object_or_404(queryset, name = name, |
132 |
+ category = category, |
133 |
+ repository__name = repository) |
134 |
+ return obj |
135 |
|
136 |
diff --git a/gpackages/templates/package.html b/gpackages/templates/package.html |
137 |
new file mode 100644 |
138 |
index 0000000..9023001 |
139 |
--- /dev/null |
140 |
+++ b/gpackages/templates/package.html |
141 |
@@ -0,0 +1,5 @@ |
142 |
+{% extends "base.html" %} |
143 |
+ |
144 |
+{% block content %} |
145 |
+ {% include 'package_object.html' %} |
146 |
+{% endblock content %} |
147 |
|
148 |
diff --git a/gpackages/templates/package_object.html b/gpackages/templates/package_object.html |
149 |
new file mode 100644 |
150 |
index 0000000..d713d4a |
151 |
--- /dev/null |
152 |
+++ b/gpackages/templates/package_object.html |
153 |
@@ -0,0 +1,12 @@ |
154 |
+{% load url from future %} |
155 |
+{% load packages %} |
156 |
+<div class="well package-well"> |
157 |
+ <div class="package-name"> |
158 |
+ <span><a href="{{ package.get_absolute_url }}">{{ package.cp }}</a>:: {{ package.repository.name }}</span> |
159 |
+ <span class="package_update_datetime">{{ package.updated_datetime }}</span> |
160 |
+ </div> |
161 |
+ {% if package.description %} |
162 |
+ <div style="padding-bottom: 10px; margin 10px;">{{ package.description }}</div> |
163 |
+ {% endif %} |
164 |
+ {% render_keywords_table package arches %} |
165 |
+</div> |
166 |
|
167 |
diff --git a/gpackages/templates/packages.html b/gpackages/templates/packages.html |
168 |
index ec6d22a..f7ac01a 100644 |
169 |
--- a/gpackages/templates/packages.html |
170 |
+++ b/gpackages/templates/packages.html |
171 |
@@ -1,18 +1,10 @@ |
172 |
{% extends "base.html" %} |
173 |
+{% load url from future %} |
174 |
{% load packages %} |
175 |
|
176 |
{% block content %} |
177 |
{% for package in packages %} |
178 |
- <div class="well package-well"> |
179 |
- <div class="package-name"> |
180 |
- <span>{{ package.cp }}</span> |
181 |
- <span class="package_update_datetime">{{ package.updated_datetime }}</span> |
182 |
- </div> |
183 |
- {% if package.description %} |
184 |
- <div style="padding-bottom: 10px; margin 10px;">{{ package.description }}</div> |
185 |
- {% endif %} |
186 |
- {% render_keywords_table package arches %} |
187 |
- </div> |
188 |
+ {% include 'package_object.html' %} |
189 |
{% endfor %} |
190 |
{% include 'paginator.html' %} |
191 |
{% endblock content %} |