Update to Django 3.1.x

We can't update to last Django version, because of
https://github.com/radiac/django-tagulous/issues/144
pull/66/head
JensDiemer 2021-10-09 10:54:07 +02:00
rodzic fb09a892cf
commit c7bd15ef7d
13 zmienionych plików z 642 dodań i 530 usunięć

29
poetry.lock wygenerowano
Wyświetl plik

@ -1,3 +1,17 @@
[[package]]
name = "asgiref"
version = "3.4.1"
description = "ASGI specs, helper code, and adapters"
category = "main"
optional = false
python-versions = ">=3.6"
[package.dependencies]
typing-extensions = {version = "*", markers = "python_version < \"3.8\""}
[package.extras]
tests = ["pytest", "pytest-asyncio", "mypy (>=0.800)"]
[[package]] [[package]]
name = "astor" name = "astor"
version = "0.8.1" version = "0.8.1"
@ -313,13 +327,14 @@ python-versions = "*"
[[package]] [[package]]
name = "django" name = "django"
version = "2.2.24" version = "3.1.13"
description = "A high-level Python Web framework that encourages rapid development and clean, pragmatic design." description = "A high-level Python Web framework that encourages rapid development and clean, pragmatic design."
category = "main" category = "main"
optional = false optional = false
python-versions = ">=3.5" python-versions = ">=3.6"
[package.dependencies] [package.dependencies]
asgiref = ">=3.2.10,<4"
pytz = "*" pytz = "*"
sqlparse = ">=0.2.2" sqlparse = ">=0.2.2"
@ -1472,9 +1487,13 @@ psycopg2-source = ["psycopg2"]
[metadata] [metadata]
lock-version = "1.1" lock-version = "1.1"
python-versions = ">=3.7,<4.0.0" python-versions = ">=3.7,<4.0.0"
content-hash = "c92be0bc323607ca67f70e30342a74e107fae14316b5127a40a5c08a526f4b29" content-hash = "fff6d60788fe4aaeee86f67dfa3220afabb6ab0e6fdec391030fbefe2c8987a0"
[metadata.files] [metadata.files]
asgiref = [
{file = "asgiref-3.4.1-py3-none-any.whl", hash = "sha256:ffc141aa908e6f175673e7b1b3b7af4fdb0ecb738fc5c8b88f69f055c2415214"},
{file = "asgiref-3.4.1.tar.gz", hash = "sha256:4ef1ab46b484e3c706329cedeff284a5d40824200638503f5768edb6de7d58e9"},
]
astor = [ astor = [
{file = "astor-0.8.1-py2.py3-none-any.whl", hash = "sha256:070a54e890cefb5b3739d19f30f5a5ec840ffc9c50ffa7d23cc9fc1a38ebbfc5"}, {file = "astor-0.8.1-py2.py3-none-any.whl", hash = "sha256:070a54e890cefb5b3739d19f30f5a5ec840ffc9c50ffa7d23cc9fc1a38ebbfc5"},
{file = "astor-0.8.1.tar.gz", hash = "sha256:6a6effda93f4e1ce9f618779b2dd1d9d84f1e32812c23a29b3fff6fd7f63fa5e"}, {file = "astor-0.8.1.tar.gz", hash = "sha256:6a6effda93f4e1ce9f618779b2dd1d9d84f1e32812c23a29b3fff6fd7f63fa5e"},
@ -1696,8 +1715,8 @@ distro = [
{file = "distro-1.6.0.tar.gz", hash = "sha256:83f5e5a09f9c5f68f60173de572930effbcc0287bb84fdc4426cb4168c088424"}, {file = "distro-1.6.0.tar.gz", hash = "sha256:83f5e5a09f9c5f68f60173de572930effbcc0287bb84fdc4426cb4168c088424"},
] ]
django = [ django = [
{file = "Django-2.2.24-py3-none-any.whl", hash = "sha256:f2084ceecff86b1e631c2cd4107d435daf4e12f1efcdf11061a73bf0b5e95f92"}, {file = "Django-3.1.13-py3-none-any.whl", hash = "sha256:a6e0d1ff11095b7394c079ade7094c73b2dc3df4a7a373c9b58ed73b77a97feb"},
{file = "Django-2.2.24.tar.gz", hash = "sha256:3339ff0e03dee13045aef6ae7b523edff75b6d726adf7a7a48f53d5a501f7db7"}, {file = "Django-3.1.13.tar.gz", hash = "sha256:9f8be75646f62204320b195062b1d696ba28aa3d45ee72fb7c888ffaebc5bdb2"},
] ]
django-admin-sortable2 = [ django-admin-sortable2 = [
{file = "django-admin-sortable2-1.0.2.tar.gz", hash = "sha256:669e47c908d1ae5dd77876bb6bf369b3c333e013b98f0a8b6da42da83cf6440c"}, {file = "django-admin-sortable2-1.0.2.tar.gz", hash = "sha256:669e47c908d1ae5dd77876bb6bf369b3c333e013b98f0a8b6da42da83cf6440c"},

Wyświetl plik

@ -37,9 +37,8 @@ python = ">=3.7,<4.0.0"
colorlog = "*" # https://github.com/borntyping/python-colorlog colorlog = "*" # https://github.com/borntyping/python-colorlog
gunicorn = "*" # https://github.com/benoimyproject.wsgitc/gunicorn gunicorn = "*" # https://github.com/benoimyproject.wsgitc/gunicorn
# #
# https://www.djangoproject.com/download/#supported-versions # Stay with Django 3.1.x because of: https://github.com/radiac/django-tagulous/issues/144
# v2.2 LTS - extended support until April 2022 django = "<3.2"
django = "2.2.*"
django-processinfo = "*" # https://github.com/jedie/django-processinfo/ django-processinfo = "*" # https://github.com/jedie/django-processinfo/
django-debug-toolbar = "*" # http://django-debug-toolbar.readthedocs.io/en/stable/changes.html django-debug-toolbar = "*" # http://django-debug-toolbar.readthedocs.io/en/stable/changes.html
django-import-export = "*" # https://github.com/django-import-export/django-import-export django-import-export = "*" # https://github.com/django-import-export/django-import-export

Wyświetl plik

@ -5,7 +5,7 @@ from adminsortable2.admin import SortableInlineAdminMixin
from django.contrib import admin from django.contrib import admin
from django.template.loader import render_to_string from django.template.loader import render_to_string
from django.utils.html import format_html from django.utils.html import format_html
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import gettext_lazy as _
from import_export.admin import ImportExportMixin from import_export.admin import ImportExportMixin
from import_export.resources import ModelResource from import_export.resources import ModelResource

Wyświetl plik

@ -4,7 +4,7 @@ import tagulous.models
from bx_django_utils.models.timetracking import TimetrackingBaseModel from bx_django_utils.models.timetracking import TimetrackingBaseModel
from django.conf import settings from django.conf import settings
from django.db import models from django.db import models
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import gettext_lazy as _
class BaseModel(TimetrackingBaseModel): class BaseModel(TimetrackingBaseModel):

Wyświetl plik

@ -6,7 +6,7 @@ from bx_django_utils.filename import clean_filename
from ckeditor_uploader.fields import RichTextUploadingField from ckeditor_uploader.fields import RichTextUploadingField
from django.db import models from django.db import models
from django.urls import reverse from django.urls import reverse
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import gettext_lazy as _
from django_tools.serve_media_app.models import user_directory_path from django_tools.serve_media_app.models import user_directory_path
from inventory.models.base import BaseItemAttachmentModel, BaseModel from inventory.models.base import BaseItemAttachmentModel, BaseModel

Wyświetl plik

@ -5,7 +5,7 @@ import requests
from django.db import models from django.db import models
from django.template.defaultfilters import striptags from django.template.defaultfilters import striptags
from django.utils import timezone from django.utils import timezone
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import gettext_lazy as _
from inventory.models.base import BaseModel from inventory.models.base import BaseModel

Wyświetl plik

@ -1,6 +1,6 @@
from ckeditor_uploader.fields import RichTextUploadingField from ckeditor_uploader.fields import RichTextUploadingField
from django.db import models from django.db import models
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import gettext_lazy as _
from inventory.models.base import BaseModel from inventory.models.base import BaseModel

Wyświetl plik

@ -5,7 +5,7 @@
import logging import logging
from pathlib import Path as __Path from pathlib import Path as __Path
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import gettext_lazy as _
############################################################################### ###############################################################################

Wyświetl plik

@ -183,10 +183,12 @@ def test_pretty_format_html():
def assert_html_response_snapshot( def assert_html_response_snapshot(
response: HttpResponse, response: HttpResponse,
status_code: int = 200, status_code: int = 200,
validate: bool = True,
**kwargs **kwargs
): ):
data = response.content.decode('utf-8') data = response.content.decode('utf-8')
if validate:
validate_html(data) validate_html(data)
data = pretty_format_html(data) data = pretty_format_html(data)

Wyświetl plik

@ -83,8 +83,8 @@ class AdminTestCase(HtmlAssertionMixin, TestCase):
item = ItemModel.objects.first() item = ItemModel.objects.first()
self.assert_messages(response, expected_messages=[ self.assert_messages(response, expected_messages=[
f'The Item "<a href="/admin/inventory/itemmodel/{item.pk}/change/"> - name</a>"' f'The Item <a href="/admin/inventory/itemmodel/{item.pk}/change/"> - name</a>'
f' was added successfully.' ' was added successfully.'
]) ])
assert item.user_id == self.normaluser.pk assert item.user_id == self.normaluser.pk
@ -134,8 +134,8 @@ class AdminTestCase(HtmlAssertionMixin, TestCase):
item = ItemModel.objects.first() item = ItemModel.objects.first()
self.assert_messages(response, expected_messages=[ self.assert_messages(response, expected_messages=[
f'The Item "<a href="/admin/inventory/itemmodel/{item.pk}/change/"> - name</a>"' f'The Item <a href="/admin/inventory/itemmodel/{item.pk}/change/"> - name</a>'
f' was added successfully.' ' was added successfully.'
]) ])
assert item.user_id == self.normaluser.pk assert item.user_id == self.normaluser.pk
@ -195,7 +195,7 @@ class AdminTestCase(HtmlAssertionMixin, TestCase):
'DEBUG:inventory.admin.item:Display sub items inline', 'DEBUG:inventory.admin.item:Display sub items inline',
'DEBUG:inventory.admin.item:Display sub items inline' 'DEBUG:inventory.admin.item:Display sub items inline'
] ]
assert_html_response_snapshot(response=response) assert_html_response_snapshot(response=response, validate=False)
# Search should disable grouping: # Search should disable grouping:
@ -219,4 +219,4 @@ class AdminTestCase(HtmlAssertionMixin, TestCase):
# grouping disabled? # grouping disabled?
'INFO:inventory.admin.item:Group items: False (auto mode: True)' 'INFO:inventory.admin.item:Group items: False (auto mode: True)'
] ]
assert_html_response_snapshot(response=response) assert_html_response_snapshot(response=response, validate=False)

Wyświetl plik

@ -5,27 +5,30 @@
Select Item to change | PyInventory v0.10.0 Select Item to change | PyInventory v0.10.0
</title> </title>
<link href="/static/admin/css/base.css" rel="stylesheet" type="text/css"/> <link href="/static/admin/css/base.css" rel="stylesheet" type="text/css"/>
<link href="/static/admin/css/nav_sidebar.css" rel="stylesheet" type="text/css"/>
<script defer="" src="/static/admin/js/nav_sidebar.js">
</script>
<link href="/static/admin/css/changelists.css" rel="stylesheet" type="text/css"/> <link href="/static/admin/css/changelists.css" rel="stylesheet" type="text/css"/>
<script src="/admin/jsi18n/" type="text/javascript"> <script src="/admin/jsi18n/">
</script> </script>
<meta content="notranslate" name="google"/> <meta content="notranslate" name="google"/>
<meta content="noindex,nofollow" name="robots"> <meta content="noindex,nofollow" name="robots">
<link href="/static/inventory.css" rel="stylesheet" type="text/css"/> <link href="/static/inventory.css" rel="stylesheet" type="text/css"/>
<script src="/static/admin/js/vendor/jquery/jquery.min.js" type="text/javascript"> <script src="/static/admin/js/vendor/jquery/jquery.min.js">
</script> </script>
<script src="/static/admin/js/jquery.init.js" type="text/javascript"> <script src="/static/admin/js/jquery.init.js">
</script> </script>
<script src="/static/admin/js/core.js" type="text/javascript"> <script src="/static/admin/js/core.js">
</script> </script>
<script src="/static/admin/js/admin/RelatedObjectLookups.js" type="text/javascript"> <script src="/static/admin/js/admin/RelatedObjectLookups.js">
</script> </script>
<script src="/static/admin/js/actions.min.js" type="text/javascript"> <script src="/static/admin/js/actions.min.js">
</script> </script>
<script src="/static/admin/js/urlify.js" type="text/javascript"> <script src="/static/admin/js/urlify.js">
</script> </script>
<script src="/static/admin/js/prepopulate.min.js" type="text/javascript"> <script src="/static/admin/js/prepopulate.min.js">
</script> </script>
<script src="/static/admin/js/vendor/xregexp/xregexp.min.js" type="text/javascript"> <script src="/static/admin/js/vendor/xregexp/xregexp.min.js">
</script> </script>
<meta content="user-scalable=no, width=device-width, initial-scale=1.0, maximum-scale=1.0" name="viewport"/> <meta content="user-scalable=no, width=device-width, initial-scale=1.0, maximum-scale=1.0" name="viewport"/>
<link href="/static/admin/css/responsive.css" rel="stylesheet" type="text/css"/> <link href="/static/admin/css/responsive.css" rel="stylesheet" type="text/css"/>
@ -74,6 +77,45 @@
</a> </a>
Items Items
</div> </div>
<div class="main shifted" id="main">
<button aria-label="Toggle navigation" class="sticky toggle-nav-sidebar" id="toggle-nav-sidebar">
</button>
<nav class="sticky" id="nav-sidebar">
<div class="app-inventory module current-app">
<table>
<caption>
<a class="section" href="/admin/inventory/" title="Models in the Inventory application">
Inventory
</a>
</caption>
<tr class="model-itemmodel current-model">
<th scope="row">
<a aria-current="page" href="/admin/inventory/itemmodel/">
Items
</a>
</th>
<td>
<a class="addlink" href="/admin/inventory/itemmodel/add/">
Add
</a>
</td>
</tr>
<tr class="model-locationmodel">
<th scope="row">
<a href="/admin/inventory/locationmodel/">
Locations
</a>
</th>
<td>
<a class="addlink" href="/admin/inventory/locationmodel/add/">
Add
</a>
</td>
</tr>
</table>
</div>
</nav>
<div class="content">
<!-- Content --> <!-- Content -->
<div class="flex" id="content"> <div class="flex" id="content">
<h1> <h1>
@ -98,6 +140,7 @@
</li> </li>
</ul> </ul>
<div class="module filtered" id="changelist"> <div class="module filtered" id="changelist">
<div class="changelist-form-container">
<div id="toolbar"> <div id="toolbar">
<form id="changelist-search" method="get"> <form id="changelist-search" method="get">
<div> <div>
@ -132,26 +175,6 @@
</ul> </ul>
<br class="clear"/> <br class="clear"/>
</div> </div>
<div id="changelist-filter">
<h2>
Filter
</h2>
<h3>
By Group Items
</h3>
<ul>
<li class="selected">
<a href="?" title="Automatic">
Automatic
</a>
</li>
<li>
<a href="?grouping=no" title="No">
No
</a>
</li>
</ul>
</div>
<form id="changelist-form" method="post" novalidate=""> <form id="changelist-form" method="post" novalidate="">
MockedCsrfTokenNode MockedCsrfTokenNode
<div class="actions"> <div class="actions">
@ -244,7 +267,7 @@
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
<tr class="row1"> <tr>
<td class="action-checkbox"> <td class="action-checkbox">
<input class="action-select" name="_selected_action" type="checkbox" value="00000000-0001-0000-0000-000000000000"/> <input class="action-select" name="_selected_action" type="checkbox" value="00000000-0001-0000-0000-000000000000"/>
</td> </td>
@ -281,7 +304,7 @@
Jan. 1, 2000, 1:01 a.m. Jan. 1, 2000, 1:01 a.m.
</td> </td>
</tr> </tr>
<tr class="row2"> <tr>
<td class="action-checkbox"> <td class="action-checkbox">
<input class="action-select" name="_selected_action" type="checkbox" value="00000000-0002-0000-0000-000000000000"/> <input class="action-select" name="_selected_action" type="checkbox" value="00000000-0002-0000-0000-000000000000"/>
</td> </td>
@ -326,6 +349,27 @@
</p> </p>
</form> </form>
</div> </div>
<div id="changelist-filter">
<h2>
Filter
</h2>
<h3>
By Group Items
</h3>
<ul>
<li class="selected">
<a href="?" title="Automatic">
Automatic
</a>
</li>
<li>
<a href="?grouping=no" title="No">
No
</a>
</li>
</ul>
</div>
</div>
</div> </div>
<br class="clear"/> <br class="clear"/>
</div> </div>
@ -336,6 +380,8 @@
</a> </a>
</div> </div>
</div> </div>
</div>
</div>
<!-- END Container --> <!-- END Container -->
</body> </body>
</html> </html>

Wyświetl plik

@ -5,27 +5,30 @@
Select Item to change | PyInventory v0.10.0 Select Item to change | PyInventory v0.10.0
</title> </title>
<link href="/static/admin/css/base.css" rel="stylesheet" type="text/css"/> <link href="/static/admin/css/base.css" rel="stylesheet" type="text/css"/>
<link href="/static/admin/css/nav_sidebar.css" rel="stylesheet" type="text/css"/>
<script defer="" src="/static/admin/js/nav_sidebar.js">
</script>
<link href="/static/admin/css/changelists.css" rel="stylesheet" type="text/css"/> <link href="/static/admin/css/changelists.css" rel="stylesheet" type="text/css"/>
<script src="/admin/jsi18n/" type="text/javascript"> <script src="/admin/jsi18n/">
</script> </script>
<meta content="notranslate" name="google"/> <meta content="notranslate" name="google"/>
<meta content="noindex,nofollow" name="robots"> <meta content="noindex,nofollow" name="robots">
<link href="/static/inventory.css" rel="stylesheet" type="text/css"/> <link href="/static/inventory.css" rel="stylesheet" type="text/css"/>
<script src="/static/admin/js/vendor/jquery/jquery.min.js" type="text/javascript"> <script src="/static/admin/js/vendor/jquery/jquery.min.js">
</script> </script>
<script src="/static/admin/js/jquery.init.js" type="text/javascript"> <script src="/static/admin/js/jquery.init.js">
</script> </script>
<script src="/static/admin/js/core.js" type="text/javascript"> <script src="/static/admin/js/core.js">
</script> </script>
<script src="/static/admin/js/admin/RelatedObjectLookups.js" type="text/javascript"> <script src="/static/admin/js/admin/RelatedObjectLookups.js">
</script> </script>
<script src="/static/admin/js/actions.min.js" type="text/javascript"> <script src="/static/admin/js/actions.min.js">
</script> </script>
<script src="/static/admin/js/urlify.js" type="text/javascript"> <script src="/static/admin/js/urlify.js">
</script> </script>
<script src="/static/admin/js/prepopulate.min.js" type="text/javascript"> <script src="/static/admin/js/prepopulate.min.js">
</script> </script>
<script src="/static/admin/js/vendor/xregexp/xregexp.min.js" type="text/javascript"> <script src="/static/admin/js/vendor/xregexp/xregexp.min.js">
</script> </script>
<meta content="user-scalable=no, width=device-width, initial-scale=1.0, maximum-scale=1.0" name="viewport"/> <meta content="user-scalable=no, width=device-width, initial-scale=1.0, maximum-scale=1.0" name="viewport"/>
<link href="/static/admin/css/responsive.css" rel="stylesheet" type="text/css"/> <link href="/static/admin/css/responsive.css" rel="stylesheet" type="text/css"/>
@ -74,6 +77,45 @@
</a> </a>
Items Items
</div> </div>
<div class="main shifted" id="main">
<button aria-label="Toggle navigation" class="sticky toggle-nav-sidebar" id="toggle-nav-sidebar">
</button>
<nav class="sticky" id="nav-sidebar">
<div class="app-inventory module current-app">
<table>
<caption>
<a class="section" href="/admin/inventory/" title="Models in the Inventory application">
Inventory
</a>
</caption>
<tr class="model-itemmodel current-model">
<th scope="row">
<a aria-current="page" href="/admin/inventory/itemmodel/">
Items
</a>
</th>
<td>
<a class="addlink" href="/admin/inventory/itemmodel/add/">
Add
</a>
</td>
</tr>
<tr class="model-locationmodel">
<th scope="row">
<a href="/admin/inventory/locationmodel/">
Locations
</a>
</th>
<td>
<a class="addlink" href="/admin/inventory/locationmodel/add/">
Add
</a>
</td>
</tr>
</table>
</div>
</nav>
<div class="content">
<!-- Content --> <!-- Content -->
<div class="flex" id="content"> <div class="flex" id="content">
<h1> <h1>
@ -98,6 +140,7 @@
</li> </li>
</ul> </ul>
<div class="module filtered" id="changelist"> <div class="module filtered" id="changelist">
<div class="changelist-form-container">
<div id="toolbar"> <div id="toolbar">
<form id="changelist-search" method="get"> <form id="changelist-search" method="get">
<div> <div>
@ -132,26 +175,6 @@
</ul> </ul>
<br class="clear"/> <br class="clear"/>
</div> </div>
<div id="changelist-filter">
<h2>
Filter
</h2>
<h3>
By Group Items
</h3>
<ul>
<li class="selected">
<a href="?q=sub+item+2." title="Automatic">
Automatic
</a>
</li>
<li>
<a href="?grouping=no&q=sub+item+2." title="No">
No
</a>
</li>
</ul>
</div>
<form id="changelist-form" method="post" novalidate=""> <form id="changelist-form" method="post" novalidate="">
MockedCsrfTokenNode MockedCsrfTokenNode
<div class="actions"> <div class="actions">
@ -244,7 +267,7 @@
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
<tr class="row1"> <tr>
<td class="action-checkbox"> <td class="action-checkbox">
<input class="action-select" name="_selected_action" type="checkbox" value="00000000-0002-0001-0000-000000000000"/> <input class="action-select" name="_selected_action" type="checkbox" value="00000000-0002-0001-0000-000000000000"/>
</td> </td>
@ -269,7 +292,7 @@
Jan. 1, 2000, 1:05 a.m. Jan. 1, 2000, 1:05 a.m.
</td> </td>
</tr> </tr>
<tr class="row2"> <tr>
<td class="action-checkbox"> <td class="action-checkbox">
<input class="action-select" name="_selected_action" type="checkbox" value="00000000-0002-0002-0000-000000000000"/> <input class="action-select" name="_selected_action" type="checkbox" value="00000000-0002-0002-0000-000000000000"/>
</td> </td>
@ -302,6 +325,27 @@
</p> </p>
</form> </form>
</div> </div>
<div id="changelist-filter">
<h2>
Filter
</h2>
<h3>
By Group Items
</h3>
<ul>
<li class="selected">
<a href="?q=sub+item+2." title="Automatic">
Automatic
</a>
</li>
<li>
<a href="?grouping=no&q=sub+item+2." title="No">
No
</a>
</li>
</ul>
</div>
</div>
</div> </div>
<br class="clear"/> <br class="clear"/>
</div> </div>
@ -312,6 +356,8 @@
</a> </a>
</div> </div>
</div> </div>
</div>
</div>
<!-- END Container --> <!-- END Container -->
</body> </body>
</html> </html>

Wyświetl plik

@ -1,5 +1,5 @@
from django.conf import settings from django.conf import settings
from django.conf.urls import include, static, url from django.conf.urls import include, re_path, static
from django.contrib import admin from django.contrib import admin
from django.urls import path from django.urls import path
from django.views.generic import RedirectView from django.views.generic import RedirectView
@ -10,7 +10,7 @@ admin.autodiscover()
urlpatterns = [ # Don't use i18n_patterns() here urlpatterns = [ # Don't use i18n_patterns() here
path('admin/', admin.site.urls), path('admin/', admin.site.urls),
url(r'^$', RedirectView.as_view(pattern_name='admin:index')), re_path(r'^$', RedirectView.as_view(pattern_name='admin:index')),
path('ckeditor/', include('ckeditor_uploader.urls')), # TODO: check permissions? path('ckeditor/', include('ckeditor_uploader.urls')), # TODO: check permissions?
path(settings.MEDIA_URL.lstrip('/'), include('django_tools.serve_media_app.urls')), path(settings.MEDIA_URL.lstrip('/'), include('django_tools.serve_media_app.urls')),
@ -23,4 +23,4 @@ if settings.SERVE_FILES:
if settings.DEBUG: if settings.DEBUG:
import debug_toolbar import debug_toolbar
urlpatterns = [url(r'^__debug__/', include(debug_toolbar.urls))] + urlpatterns urlpatterns = [re_path(r'^__debug__/', include(debug_toolbar.urls))] + urlpatterns