how to convert to Django 3 or 4

98 views
Skip to first unread message

john fabiani

unread,
Jun 2, 2023, 5:21:14 PM6/2/23
to django...@googlegroups.com
Hi everyone,

I am tasked with updating/upgrading a very old Django web site - I believe it is 1.7.  I need convert and need what is required.
Thanks in advance.


I need to convert the following:

from django.conf.urls import patterns, include, url
from django.contrib import admin
from django.conf import settings
from django.conf.urls.static import static

urlpatterns = patterns('',
    # Examples:
    url(r'reg4/$', 'register.views.reg4', name='reg4'),
    url(r'reg3/$', 'register.views.reg3', name='reg3'),
    url(r'reg2/$', 'register.views.reg2', name='reg2'),
    #url(r'reg1/$', 'register.views.reg1', name='reg1'),
    url(r'reg1/$', 'register.views.reg1', name='reg1'),
    #url(r'^$', 'register.views.home', name='home'),
    url(r'reg/$', 'register.views.home', name='home'),
    url(r'get_courts/(\d+)$', 'register.views.get_courts', name='get_courts'),
    url(r'get_courses/(\d+)$', 'register.views.get_courses', name='get_courses'),
    url(r'autoschedule/', 'register.views.autoschedule', name='autoschedule'),
    url(r'get_cities/(\d+)$', 'register.views.get_cities', name='get_cities'),
    url(r'get_classes/(\d+)$', 'register.views.get_classes', name='get_classes'),
    url(r'get_cities2/(\d+)/(\d+)/$', 'register.views.get_cities2', name='get_cities2'),
    url(r'get_classes2/(\d+)/(\d+)/$', 'register.views.get_classes2', name='get_classes2'),
    url(r'rejected/$', 'register.views.rejected', name='rejected'),
    url(r'finished/$', 'register.views.finished', name='finished'),
    
    ##url(r'^$', 'profiles.views.home', name='home'),
    #url(r'^contact/$', 'register.views.home', name='contact'),
    #url(r'^about/$', 'register.views.about', name='about'),
    #url(r'^profile/$', 'register.views.user_profile', name='profile'),
    #url(r'^checkout/$', 'checkout.views.checkout', name='checkout'),    
    # url(r'^blog/', include('blog.urls')),

    url(r'^admin/', include(admin.site.urls)),
) + static(settings.STATIC_URL, document_root = settings.STATIC_ROOT)

What is required?

David Nugent

unread,
Jun 2, 2023, 9:13:42 PM6/2/23
to django...@googlegroups.com
I have been through the experience of moving existing Django 1.5 app to 3.2 a couple years ago. Without doubt, the path of least resistance is to rebuild the site from scratch. Start with the latest release (ie. 4.2 as of today).

You'll have the apps already defined and these have a blueprint. Your templates are done and may not need to be touched at all. Settings will be different so build that in as your progress through the implementation. You may need to "port" any customisations - for example middleware and templatetags, but structurally the application should be much the same.

HTH,
David



--
You received this message because you are subscribed to the Google Groups "Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to django-users...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/8f8a68b4-a3c5-a10d-8246-2ef41635b406%40jfcomputer.com.

john fabiani

unread,
Jun 2, 2023, 9:58:22 PM6/2/23
to django...@googlegroups.com
Thanks for taking the time.
I'm hoping someone will take the time to explain how to replace the old code.  As you might be aware there is no longer the "patterns".  So I am trying to determine how the url.py directs Django to the correct view?

Johnf

Muhammad Juwaini Abdul Rahman

unread,
Jun 2, 2023, 10:00:17 PM6/2/23
to django...@googlegroups.com
I think Django 4 still have backward compatibility with `url` although `path` is preferable.

You can try to `runserver` in your local, upgrade your django version in your virtualenv to version 4 and troubleshoot the error messages (if any) one by one.

Mike Dewhirst

unread,
Jun 2, 2023, 10:39:26 PM6/2/23
to django...@googlegroups.com
On 3/06/2023 7:20 am, john fabiani wrote:
Hi everyone,

I am tasked with updating/upgrading a very old Django web site - I believe it is 1.7.  I need convert and need what is required.
Thanks in advance.


I need to convert the following:


Because all your urls are regular expressions, you can replace them all with re_path. A quick and dirty starter might be to replace the next line and see where that gets you ...


from django.conf.urls import patterns, include, url

from django.urls import include
from django.urls import re_path as url

If that gets you a bit further there is a lot more to do. Really the only methodical way forward is to upgrade Django a step at a time after studying the release notes for the next version.

Finally you should decide whether to get rid of re_path (as url) and refactor to use path. Depends on you view of the future.

--
You received this message because you are subscribed to the Google Groups "Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to django-users...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/8f8a68b4-a3c5-a10d-8246-2ef41635b406%40jfcomputer.com.


-- 
Signed email is an absolute defence against phishing. This email has
been signed with my private key. If you import my public key you can
automatically decrypt my signature and be sure it came from me. Your
email software can handle signing.
OpenPGP_signature

carlos

unread,
Jun 2, 2023, 10:46:09 PM6/2/23
to django...@googlegroups.com
maybe maybe this app hepl you i don't used never but a read this good, but i don't know is helped you



--
att.
Carlos Rocha

Mike Dewhirst

unread,
Jun 2, 2023, 10:46:40 PM6/2/23
to django...@googlegroups.com
On 3/06/2023 11:57 am, john fabiani wrote:
aware there is no longer the "patterns"

urlpatterns = [
    ...
]

It is just a list nowadays.
OpenPGP_signature

David Nugent

unread,
Jun 3, 2023, 3:33:04 AM6/3/23
to django...@googlegroups.com
nppe url is obsolete and removed in 4.x.

You can use re_path, which is a kind of replacement but even then you will need to adjust the regex in many cases.

The best approach is to understand what the url() is doing, and replicate the same using path(). Once you do, the conversions should be more or less straight-forward. Instead of regex you use labelled patterns making for more comprehensible path lines. For complex regex expressions you may need to define custom matches - or "converters" - that enforce specific patterns allowing you to restrict input and improve matching. This is one area that Django has improved really well over time.

But, like I said, don't try to replace this file wholesale. Instead of converting it and doing error-fix-error-fix ad infinitun, re-implement things as you enable parts of the app you have successfully ported. While re_path may be a fallback, try to re-implement as path() expressions and you'll be better in the long run.


Shams Ulhaq

unread,
Jun 3, 2023, 4:10:31 AM6/3/23
to django...@googlegroups.com
Just need to change url import 
from django.urls import include, re_path as url

Paul Haguet

unread,
Jun 6, 2023, 10:24:36 AM6/6/23
to Django users
There is a lot of function who can change. 

https://docs.djangoproject.com/en/4.2/releases/4.0/

All the function declared as deprecated into Django 3 has been removed into Django 4. In the deprecated section of django 3 new functions names are systematically indicated. So just search the function under their old name and replace them with their new name. The 2 links below give the list.

https://docs.djangoproject.com/en/4.2/releases/3.0/#deprecated-features-3-0
https://docs.djangoproject.com/en/4.2/releases/3.1/#deprecated-features-3-1

Steven Mapes

unread,
Jun 7, 2023, 10:52:35 AM6/7/23
to Django users
I'd suggest looking into using Adam Johnson's Django-Upgrade told -https://github.com/adamchainz/django-upgrade it will help you move between versions

Rogério Carrasqueira

unread,
Jun 8, 2023, 2:57:40 PM6/8/23
to Django users
Hey Steven!

Thanks for this information, do you have tried it before? I would like to move from 1.4 to lastest, do you think that is it possible?

Thanks

Steven Mapes

unread,
Jun 8, 2023, 4:02:10 PM6/8/23
to django...@googlegroups.com
I've used it to go from Django 3 to 4 and to move a project from 1.11 to 2.2.

It doesn't do everything for you but it's a great start. I've personally moved from 1.8 through to 4.2.2 but that was during their development lifecycle. Moving up to 1.7 and then 1.7 to 1.8 and 1.8 to 1.11 and 1.11 to 2 will be the hardest parts but it'll get easier once you're on 1.11

You received this message because you are subscribed to a topic in the Google Groups "Django users" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/django-users/IZM9YwsfzX4/unsubscribe.
To unsubscribe from this group and all its topics, send an email to django-users...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/c9680819-15cb-47ba-b81e-cb1ce1d65eden%40googlegroups.com.

Rogerio Carrasqueira

unread,
Jun 8, 2023, 4:30:58 PM6/8/23
to django...@googlegroups.com
So just to undersand, I cannot move directly from 1.4 to 4 I have to do it in steps, right?

Thanks 
Rogério Carrasqueira





אורי

unread,
Jun 8, 2023, 10:21:29 PM6/8/23
to django...@googlegroups.com
Hi,

I think you can try to upgrade LTS to LTS. That is, upgrade to the next LTS, then the next LTS, and not directly to Django 4.2. With each LTS check that the site is working. And also, I would recommend using the latest Django release only 6 months after the initial release, because all your dependencies have to upgrade and also bug fixes. So use Django 4.1 now, and Django 4.2 only on October 2023.

If you have a problem with something not working, read the release notes of the specific versions and search for the function not working. For example, search for "url" on the page (control-f in the browser).

Good luck!

Uri Rodberg, Speedy Net.

Steven Mapes

unread,
Jun 9, 2023, 2:38:08 AM6/9/23
to django...@googlegroups.com
If you want to go directly then start a new project and "lift and shift" code fixing and updating as you go. Depending on the size of the project and the complexity of the processes it may be the fastest way to do it.

If you want to keep the same project then upgrade in stages. The fact you're in 1.4 will make it hard and you'll need to do a lot of manual changes to get into 1.8 so starting new may well be quicker. If you did upgrade then I'd go 1.8 to 1.11, 2.2, 3.2 and finally 4.2.

Branch the code using version control and see how bad it is but it'll depend on the project.
I went from 1.11 to 3.2 in a day for one but most of the code was bespoke without may external packages to worry about. Those could also cause you issues.

Since the code is Django 1.4 what version of python is it also using?


Rogerio Carrasqueira

unread,
Jun 9, 2023, 10:29:47 AM6/9/23
to django...@googlegroups.com
I'm using python 2.7, wich your suggestion?

Thanks


Rogério Carrasqueira





Steven Mapes

unread,
Jun 12, 2023, 4:18:08 AM6/12/23
to Django users
Ah Python 2.7, you'll need to upgrade through to at least 3.8 so unless it's a huge project where you have time to upgrade through the Django Versions and different versions of Python as you go, you may just want to create a new project and lift the code as you go.

ivan harold

unread,
Aug 9, 2023, 10:37:59 AM8/9/23
to Django users

No, it's not an easy task…

It's not easy because Django 3.0 and above completely moved from python 2 to python 3 and there is no backward compatibility.

So some packages may break.

You have to change all the instances of old code.

You have to check changelog on djanango website and you may have to change some dependencies too.

For example, Django used ‘six’ libraries when it gave support for python 2, but after 3.0, things changed and it will definitely break your old code.

If you still want to migrate, you have to do it carefully, the best option is to create new projects, copy previous Django app to your new project and run the application. The app will give you error related to module import or module not found, then you can replace that code easily from your old app.

Hope it's helpful

Reply all
Reply to author
Forward
0 new messages