Skip to content

Commit 72a7167

Browse files
committed
Fixed #5192 -- Modified flatpage admin form to allow ~ and . characters in flatpage names. Thanks to [email protected] for the report, Idan Gazit for summarizing the issue on the ticket, and ctrochalakis for the initial patch.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@13655 bcc190cf-cafb-0310-a4f2-bffc1f526a37
1 parent e1e2726 commit 72a7167

File tree

4 files changed

+41
-2
lines changed

4 files changed

+41
-2
lines changed

django/contrib/flatpages/admin.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,11 @@
55

66

77
class FlatpageForm(forms.ModelForm):
8-
url = forms.RegexField(label=_("URL"), max_length=100, regex=r'^[-\w/]+$',
8+
url = forms.RegexField(label=_("URL"), max_length=100, regex=r'^[-\w/\.~]+$',
99
help_text = _("Example: '/about/contact/'. Make sure to have leading"
1010
" and trailing slashes."),
1111
error_message = _("This value must contain only letters, numbers,"
12-
" underscores, dashes or slashes."))
12+
" dots, underscores, dashes, slashes or tildes."))
1313

1414
class Meta:
1515
model = FlatPage
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
from django.contrib.flatpages.tests.csrf import *
2+
from django.contrib.flatpages.tests.forms import *
23
from django.contrib.flatpages.tests.middleware import *
34
from django.contrib.flatpages.tests.templatetags import *
45
from django.contrib.flatpages.tests.views import *
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
from django.contrib.flatpages.admin import FlatpageForm
2+
from django.test import TestCase
3+
4+
class FlatpageAdminFormTests(TestCase):
5+
def setUp(self):
6+
self.form_data = {
7+
'title': "A test page",
8+
'content': "This is a test",
9+
'sites': [1],
10+
}
11+
12+
def test_flatpage_admin_form_url_validation(self):
13+
"The flatpage admin form validates correctly validates urls"
14+
self.assertTrue(FlatpageForm(data=dict(url='/new_flatpage/', **self.form_data)).is_valid())
15+
self.assertTrue(FlatpageForm(data=dict(url='/some.special~chars/', **self.form_data)).is_valid())
16+
self.assertTrue(FlatpageForm(data=dict(url='/some.very_special~chars-here/', **self.form_data)).is_valid())
17+
18+
self.assertFalse(FlatpageForm(data=dict(url='/a space/', **self.form_data)).is_valid())
19+
self.assertFalse(FlatpageForm(data=dict(url='/a % char/', **self.form_data)).is_valid())
20+
self.assertFalse(FlatpageForm(data=dict(url='/a ! char/', **self.form_data)).is_valid())
21+
self.assertFalse(FlatpageForm(data=dict(url='/a & char/', **self.form_data)).is_valid())
22+
self.assertFalse(FlatpageForm(data=dict(url='/a ? char/', **self.form_data)).is_valid())

django/contrib/flatpages/tests/views.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import os
22
from django.conf import settings
33
from django.contrib.auth.models import User
4+
from django.contrib.flatpages.models import FlatPage
45
from django.test import TestCase
56

67
class FlatpageViewTests(TestCase):
@@ -54,3 +55,18 @@ def test_fallback_non_existent_flatpage(self):
5455
"A non-existent flatpage won't be served if the fallback middlware is disabled"
5556
response = self.client.get('/no_such_flatpage/')
5657
self.assertEquals(response.status_code, 404)
58+
59+
def test_view_flatpage_special_chars(self):
60+
"A flatpage with special chars in the URL can be served through a view"
61+
fp = FlatPage.objects.create(
62+
url="/some.very_special~chars-here/",
63+
title="A very special page",
64+
content="Isn't it special!",
65+
enable_comments=False,
66+
registration_required=False,
67+
)
68+
fp.sites.add(1)
69+
70+
response = self.client.get('/flatpage_root/some.very_special~chars-here/')
71+
self.assertEquals(response.status_code, 200)
72+
self.assertContains(response, "<p>Isn't it special!</p>")

0 commit comments

Comments
 (0)