Merge lp:~dholbach/developer-ubuntu-com/404-redirect into lp:developer-ubuntu-com

Proposed by Daniel Holbach
Status: Rejected
Rejected by: Daniel Holbach
Proposed branch: lp:~dholbach/developer-ubuntu-com/404-redirect
Merge into: lp:developer-ubuntu-com
Diff against target: 152 lines (+97/-0)
8 files modified
developer_portal/settings.py (+2/-0)
developer_portal/urls.py (+1/-0)
redirects/admin.py (+8/-0)
redirects/migrations/0001_initial.py (+21/-0)
redirects/models.py (+20/-0)
redirects/tests.py (+3/-0)
redirects/urls.py (+16/-0)
redirects/views.py (+26/-0)
To merge this branch: bzr merge lp:~dholbach/developer-ubuntu-com/404-redirect
Reviewer Review Type Date Requested Status
Ubuntu App Developer site developers Pending
Review via email: mp+290887@code.launchpad.net
To post a comment you must log in.
Revision history for this message
Daniel Holbach (dholbach) wrote :

Unmerged revisions

206. By Daniel Holbach

add a try based on RedirectView

205. By Daniel Holbach

add simple admin interface, return a proper __str__ for our Redirects

204. By Daniel Holbach

add Redirect model

203. By Daniel Holbach

manage.py startapp redirects

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'developer_portal/settings.py'
2--- developer_portal/settings.py 2016-03-23 09:19:28 +0000
3+++ developer_portal/settings.py 2016-04-04 15:26:05 +0000
4@@ -79,6 +79,8 @@
5 'api_docs',
6
7 'md_importer',
8+
9+ 'redirects',
10 ]
11
12 MIDDLEWARE_CLASSES = (
13
14=== modified file 'developer_portal/urls.py'
15--- developer_portal/urls.py 2016-01-18 23:54:21 +0000
16+++ developer_portal/urls.py 2016-04-04 15:26:05 +0000
17@@ -34,6 +34,7 @@
18 url(r'^search/', 'developer_portal.views.search', name='search'),
19 url(r'^ckeditor/', include('ckeditor_uploader.urls')),
20 url(r'^', include('cms.urls')),
21+ url(r'^', include('redirects.urls')),
22 ) + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
23
24 urlpatterns += patterns('webapp_creator.views',
25
26=== added directory 'redirects'
27=== added file 'redirects/__init__.py'
28=== added file 'redirects/admin.py'
29--- redirects/admin.py 1970-01-01 00:00:00 +0000
30+++ redirects/admin.py 2016-04-04 15:26:05 +0000
31@@ -0,0 +1,8 @@
32+from django.contrib import admin
33+
34+from .models import Redirect
35+
36+
37+@admin.register(Redirect)
38+class RedirectAdmin(admin.ModelAdmin):
39+ pass
40
41=== added directory 'redirects/migrations'
42=== added file 'redirects/migrations/0001_initial.py'
43--- redirects/migrations/0001_initial.py 1970-01-01 00:00:00 +0000
44+++ redirects/migrations/0001_initial.py 2016-04-04 15:26:05 +0000
45@@ -0,0 +1,21 @@
46+# -*- coding: utf-8 -*-
47+from __future__ import unicode_literals
48+
49+from django.db import migrations, models
50+
51+
52+class Migration(migrations.Migration):
53+
54+ dependencies = [
55+ ]
56+
57+ operations = [
58+ migrations.CreateModel(
59+ name='Redirect',
60+ fields=[
61+ ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
62+ ('redirect_from', models.CharField(help_text="Which namespace needs the redirect? All subpages will get redirects too. Please note: There's no need to indicate the language (like 'en'), just do , e.g.: scopes", max_length=150)),
63+ ('redirect_to', models.CharField(help_text="Where do you want to redirect to? All subpages will get redirects. Please note: There's no need to indicate the language (like 'en'), just do , e.g.: phone/scopes", max_length=150)),
64+ ],
65+ ),
66+ ]
67
68=== added file 'redirects/migrations/__init__.py'
69=== added file 'redirects/models.py'
70--- redirects/models.py 1970-01-01 00:00:00 +0000
71+++ redirects/models.py 2016-04-04 15:26:05 +0000
72@@ -0,0 +1,20 @@
73+from django.db import models
74+from django.utils.translation import ugettext_lazy as _
75+
76+
77+class Redirect(models.Model):
78+ redirect_from = models.CharField(
79+ max_length=150,
80+ help_text=_("Which namespace needs the redirect? All subpages will "
81+ "get redirects too. Please note: There's no need to "
82+ "indicate the language (like 'en'), just do "
83+ ", e.g.: scopes"))
84+ redirect_to = models.CharField(
85+ max_length=150,
86+ help_text=_("Where do you want to redirect to? All subpages will "
87+ "get redirects. Please note: There's no need to "
88+ "indicate the language (like 'en'), just do "
89+ ", e.g.: phone/scopes"))
90+
91+ def __str__(self):
92+ return '{} -- {}'.format(self.redirect_from, self.redirect_to)
93
94=== added file 'redirects/tests.py'
95--- redirects/tests.py 1970-01-01 00:00:00 +0000
96+++ redirects/tests.py 2016-04-04 15:26:05 +0000
97@@ -0,0 +1,3 @@
98+from django.test import TestCase
99+
100+# Create your tests here.
101
102=== added file 'redirects/urls.py'
103--- redirects/urls.py 1970-01-01 00:00:00 +0000
104+++ redirects/urls.py 2016-04-04 15:26:05 +0000
105@@ -0,0 +1,16 @@
106+from django.conf import settings
107+from django.conf.urls import url, patterns
108+from django.views.generic.base import RedirectView
109+
110+from cms.constants import SLUG_REGEXP
111+from .views import PageRedirectView
112+
113+
114+if settings.APPEND_SLASH:
115+ regexp = r'^(?P<slug>%s)/$' % SLUG_REGEXP
116+else:
117+ regexp = r'^(?P<slug>%s)$' % SLUG_REGEXP
118+
119+urlpatterns = patterns('',
120+ url(regexp, PageRedirectView.as_view(), name='page-redirect'),
121+)
122
123=== added file 'redirects/views.py'
124--- redirects/views.py 1970-01-01 00:00:00 +0000
125+++ redirects/views.py 2016-04-04 15:26:05 +0000
126@@ -0,0 +1,26 @@
127+from django.shortcuts import get_object_or_404, render
128+from django.views.generic.base import RedirectView
129+
130+from cms.models import Page
131+from cms.utils.page_resolver import get_page_from_path
132+
133+from .models import Redirect
134+
135+
136+class PageRedirectView(RedirectView):
137+ permanent = False
138+ query_string = True
139+ pattern_name = 'page-redirect'
140+
141+ def get_redirect_url(self, *args, **kwargs):
142+ print('get_redirect_url')
143+ for redirect in Redirect.objects.all():
144+ new_url = re.sub(
145+ '^{}'.format(redirect.redirect_from), redirect.redirect_to,
146+ self.url)
147+ print(self.url, new_url)
148+ page_pk = get_page_from_path(new_url).pk
149+ page = get_object_or_404(Page, pk=page_pk)
150+ return super(
151+ ArticleCounterRedirectView,
152+ self).get_redirect_url(*args, **kwargs)

Subscribers

People subscribed via source and target branches