Skip to content

Commit 33fd6e8

Browse files
committedMar 4, 2018
autoescape values - version 1.15.0
1 parent 216fd0d commit 33fd6e8

File tree

5 files changed

+96
-7
lines changed

5 files changed

+96
-7
lines changed
 

‎.gitignore

+76
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
# Compiled source #
2+
###################
3+
*.com
4+
*.class
5+
*.dll
6+
*.exe
7+
*.o
8+
*.so
9+
*.pyc
10+
11+
# Packages #
12+
############
13+
# it's better to unpack these files and commit the raw source
14+
# git has its own built in compression methods
15+
*.7z
16+
*.dmg
17+
*.gz
18+
*.iso
19+
*.jar
20+
*.rar
21+
*.tar
22+
*.zip
23+
24+
# Logs and databases #
25+
######################
26+
*.log
27+
*.sql
28+
*.sqlite
29+
30+
# OS generated files #
31+
######################
32+
.DS_Store*
33+
ehthumbs.db
34+
Icon?
35+
Thumbs.db
36+
37+
# Other #
38+
######################
39+
.idea
40+
41+
# Virtualenv files #
42+
######################
43+
bin
44+
include
45+
lib
46+
local
47+
dist
48+
49+
# Buildout files #
50+
##################
51+
.installed.cfg
52+
.mr.developer.cfg
53+
develop-eggs
54+
downloads
55+
eggs
56+
parts
57+
src/*.egg-info
58+
lib
59+
lib64
60+
61+
# Symlinks #
62+
############
63+
project/media/theme
64+
project/media/admin
65+
66+
# Vim files #
67+
#############
68+
*.swp
69+
70+
# Local settings file (I put DB credentials there) #
71+
####################################################
72+
project/settings_local.py
73+
74+
# Specific dependencies #
75+
#########################
76+
src/shop_management_sync

‎CHANGES

+4
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
2018.03.04 - 1.15.0
2+
- possible backward incomatible change: escape() is now called for each value returned by render_column.
3+
This can be disabled by setting class attribute: escape_values to False.
4+
15
2017.02.01 - 1.14.0
26
- render_column method is now able to call get_OBJECT_display on foreign models (issue #31)
37
- potentially backward incompatible change in render_column - get_absolute_url is now called on obj that is

‎README.md

+6-3
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ _django_datatables_view_ uses **GenericViews**, so your view should just inherit
4040
:::python
4141

4242
from django_datatables_view.base_datatable_view import BaseDatatableView
43+
from django.utils.html import escape
4344

4445
class OrderListJson(BaseDatatableView):
4546
# The model we're going to show
@@ -61,7 +62,8 @@ _django_datatables_view_ uses **GenericViews**, so your view should just inherit
6162
def render_column(self, row, column):
6263
# We want to render user as a custom column
6364
if column == 'user':
64-
return '{0} {1}'.format(row.customer_firstname, row.customer_lastname)
65+
# escape HTML for security reasons
66+
return escape('{0} {1}'.format(row.customer_firstname, row.customer_lastname))
6567
else:
6668
return super(OrderListJson, self).render_column(row, column)
6769

@@ -111,6 +113,7 @@ Example JS:
111113
## Another example of views.py customisation ##
112114

113115
from django_datatables_view.base_datatable_view import BaseDatatableView
116+
from django.utils.html import escape
114117

115118
class OrderListJson(BaseDatatableView):
116119
order_columns = ['number', 'user', 'state']
@@ -148,8 +151,8 @@ Example JS:
148151
json_data = []
149152
for item in qs:
150153
json_data.append([
151-
item.number,
152-
"{0} {1}".format(item.customer_firstname, item.customer_lastname),
154+
escape(item.number), # escape HTML for security reasons
155+
escape("{0} {1}".format(item.customer_firstname, item.customer_lastname)), # escape HTML for security reasons
153156
item.get_state_display(),
154157
item.created.strftime("%Y-%m-%d %H:%M:%S"),
155158
item.modified.strftime("%Y-%m-%d %H:%M:%S")

‎django_datatables_view/base_datatable_view.py

+7-1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
from django.conf import settings
66
from django.db.models import Q
7+
from django.utils.html import escape
78

89
from .mixins import JSONResponseView
910

@@ -19,6 +20,7 @@ class DatatableMixin(object):
1920
max_display_length = 100 # max limit of records returned, do not allow to kill our server by huge sets of data
2021
pre_camel_case_notation = False # datatables 1.10 changed query string parameter names
2122
none_string = ''
23+
escape_values = True # if set to true then values returned by render_column will be escaped
2224

2325
@property
2426
def _querydict(self):
@@ -60,6 +62,9 @@ def render_column(self, row, column):
6062

6163
if value is None:
6264
value = self.none_string
65+
66+
if self.escape_values:
67+
value = escape(value)
6368

6469
if value and hasattr(obj, 'get_absolute_url'):
6570
return '<a href="%s">%s</a>' % (obj.get_absolute_url(), value)
@@ -174,7 +179,8 @@ def filter_queryset(self, qs):
174179

175180
# column specific filter
176181
if col['search.value']:
177-
qs = qs.filter(**{'{0}__istartswith'.format(self.columns[col_no].replace('.', '__')): col['search.value']})
182+
qs = qs.filter(**{
183+
'{0}__istartswith'.format(self.columns[col_no].replace('.', '__')): col['search.value']})
178184
qs = qs.filter(q)
179185
return qs
180186

‎setup.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
from setuptools import setup, find_packages
22
import os
33

4-
version = '1.14.0'
4+
version = '1.15.0'
55

66
here = os.path.abspath(os.path.dirname(__file__))
77
README = open(os.path.join(here, 'README.md')).read()
@@ -33,5 +33,5 @@
3333
dependency_links=[],
3434
install_requires=[
3535
'setuptools',
36-
],
37-
)
36+
]
37+
)

0 commit comments

Comments
 (0)
Please sign in to comment.