Skip to content

Commit ac45208

Browse files
committed
Make safe admin_links for Django 2.
1 parent 4931027 commit ac45208

File tree

3 files changed

+17
-6
lines changed

3 files changed

+17
-6
lines changed

forms_builder/example_project/settings.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@
7878
'django.contrib.sessions',
7979
'django.contrib.sites',
8080
'django.contrib.staticfiles',
81+
'django.contrib.messages',
8182
'forms_builder.forms',
8283
)
8384

forms_builder/forms/models.py

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
from django import VERSION as DJANGO_VERSION
44
from django.contrib.sites.models import Site
5+
from django.utils.html import format_html_join
56

67
try:
78
from django.urls import reverse
@@ -142,16 +143,13 @@ def get_absolute_url(self):
142143
return reverse("form_detail", kwargs={"slug": self.slug})
143144

144145
def admin_links(self):
145-
kw = {"args": (self.id,)}
146-
links = [
146+
kw = {"args": (self.id, )}
147+
return format_html_join("\n", "<div><a href='{1}'>{0}</a></div>", (
147148
(_("View form on site"), self.get_absolute_url()),
148149
(_("Filter entries"), reverse("admin:form_entries", **kw)),
149150
(_("View all entries"), reverse("admin:form_entries_show", **kw)),
150151
(_("Export all entries"), reverse("admin:form_entries_export", **kw)),
151-
]
152-
for i, (text, url) in enumerate(links):
153-
links[i] = "<a href='%s'>%s</a>" % (url, ugettext(text))
154-
return "<br>".join(links)
152+
))
155153
admin_links.allow_tags = True
156154
admin_links.short_description = ""
157155

forms_builder/forms/tests.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
from __future__ import unicode_literals
22

3+
from django.utils.safestring import SafeText
34
from django.conf import settings
45
from django.contrib.auth.models import User, AnonymousUser
56
from django.contrib.sites.models import Site
@@ -239,3 +240,14 @@ def test_input_dropdown_required_with_default(self):
239240
<option value="two" selected>two</option>
240241
<option value="three">three</option>
241242
</select>""", html=True)
243+
244+
def test_admin_link(self):
245+
form = Form.objects.create(title="Test")
246+
content = form.admin_links()
247+
self.assertIsInstance(content, SafeText)
248+
self.assertInHTML(content, """
249+
<div><a href='/forms/test/'>View form on site</a></div>
250+
<div><a href='/admin/forms/form/1/entries/'>Filter entries</a></div>
251+
<div><a href='/admin/forms/form/1/entries/show/'>View all entries</a></div>
252+
<div><a href='/admin/forms/form/1/entries/export/'>Export all entries</a></div>
253+
""")

0 commit comments

Comments
 (0)