[Fixed]-Django-channels: No route found for path


You need to use url, I had the same problem:

Not working

websocket_urlpatterns = [
  path('ws/chat/<str:room_name>/$', consumers.ChatConsumer),


websocket_urlpatterns = [
   url(r'^ws/chat/(?P<room_name>[^/]+)/$', consumers.ChatConsumer),


Try something like this:

routing.py (Inside your django app folder)

from django.urls import path
from core import consumers

websocket_urlpatterns = [
    path('ws/rooms/<uri>/', consumers.ChatConsumer),

routing.py (Same level as your settings.py)

from channels.auth import AuthMiddlewareStack
from channels.routing import ProtocolTypeRouter, URLRouter
import myapp.routing

application = ProtocolTypeRouter({
    # (http->django views is added by default)
    'websocket': AuthMiddlewareStack(

And lastly in your settings.py

    'default': {
        'BACKEND': 'channels_redis.core.RedisChannelLayer',
        'CONFIG': {
            "hosts": [REDIS_URL],

ASGI_APPLICATION = 'myapp.routing.application'


I met the same problem as you,and just now I happened to solve it!
in my ws_client.py I wrote this


and in routing.py I changed to this below and it worked

from django.urls import path
channel_routing = [
    # before I wrote 'alarm/', I just change from alarm/ to alarm

and it worked! you can try it


To anyone new that may be facing this issue. Don’t use the path pattern matcher with a regular expression. If you wish to do use, use either url or re_path instead.

using path

Match pattern without trailing or leading slash (/) and make sure pattern corresponds with client web socket URL

websocket_urlpatterns = [
    path("ws/chat/<int:uri>", ChatConsumer.as_asgi()),

Using re_path or url

Match pattern without trailing slash (/).

url(r'^ws/chat/(?P<uri>[^/]+)/$', ChatConsumer.as_asgi()),

NOTE: I advise using path because it’s easier to match patterns and read.



Removing the slash from the app.routing routes file solved the problem, I guess it was being counted a duplicate slash in the URL of that socket.

For instance, I had:

url(r'/ws/documents/get-df', consumers.DFConsumer.as_asgi())

This was not working, but it worked when I removed the first slash before was

url(r'ws/documents/get-df', consumers.DFConsumer.as_asgi())


i had similar issue and added .as_asgi() and it worked

url(r"messages/(?P<username>[\w.@+-]+)/", ChatConsumer.as_asgi()),


you may need to restart the services, seems it would not automatic reload.


I spent like more than an hour to this problem and I found out that django project my default doesn’t take asgi.py configuration settings in consideration.

  1. Install daphne into your project
    python -m pip install daphne

  2. list into your INSTALLED_APPS array

  1. Mentioned asgi application object

ASGI_APPLICATION = "myproject.asgi.application"

Run your project and see if it connects with your websocket.

For context, my asgi.py file is like this

import os

from django.core.asgi import get_asgi_application
from django.urls import path
from channels.routing import ProtocolTypeRouter, URLRouter

from chat_app.routing import ChatConsumer

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'teacher_gpt_chat.settings')

websocket_urlpatterns = [
    path('ws/chat', ChatConsumer.as_asgi())

application = ProtocolTypeRouter(
        "http": get_asgi_application(),
        "websocket": URLRouter(websocket_urlpatterns),

Leave a comment