python-3.xdjango-urlsdjango-2.0

multiple parameters url pattern django 2.0


I want to pass two parameters in my url pattern but i am getting error no-reverse match i.e 'projects'.While it works fine with only one parameter.

here is main urls file-

urlpatterns = [
    path('admin/', admin.site.urls),
    path(r'^materials/(?P<name>(\s+)/',include('materials.urls')),
    path(r'^projects/',include('projects.urls')),
]

projects.urls-

urlpatterns = [
path('',views.view_projects,name='view_projects'),
path('(?<projectid>\d+)/',views.project_steps,name='project_steps'),
path('(P<projectid>\d+)/(P<stepid>\d+)/',views.project_steps,
name='project_steps'),
] 

views.py-

 def view_projects(request):
   projects = project.objects.all
   return render(request,'projects/project_view.html', 
   {'projects':projects})

def project_steps(request,projectid,stepno=1):
  projects = project.objects.all
  stepss = steps.objects.all
  return render(request,'projects/project_steps.html', 
  {'projectid':projectid,'steps':stepss,'projects':projects,
  'stepno':stepno})

template-

 "{% url 'projects' projectid=project.id stepno=step.step_no %}"

Solution

  • You can do something as below.

    Old Way
    (r'^view_url/(\d+)/(\d+)$', r'app_name.views.view_function'),
    def view_function(request, param1, param2):
        """
        :param request:
        :param param1:
        :param param2:
        :return:
        """
        return render('/* template path and parameters */')
    
    New Way
    (r'^view_url/<int:param1>/<int:param2>$', r'app_name.views.view_function'),
    def view_function(request, param1, param2):
        """
        :param request:
        :param param1:
        :param param2:
        :return:
        """
        return render('/* template path and parameters */')
    

    For more details regex pattern in django 2.0 you can check django documentation link. https://docs.djangoproject.com/en/2.1/topics/http/urls/