diff --git a/package.json b/package.json index bb80ea24..4f844a3f 100644 --- a/package.json +++ b/package.json @@ -219,6 +219,26 @@ "language": "python", "path": "./snippets/python/unittest.json" }, + { + "language": "django", + "path": "./snippets/frameworks/django/imports.json" + }, + { + "language": "django", + "path": "./snippets/frameworks/django/forms.json" + }, + { + "language": "django", + "path": "./snippets/frameworks/django/models.json" + }, + { + "language": "django", + "path": "./snippets/frameworks/django/views.json" + }, + { + "language": "django", + "path": "./snippets/frameworks/django/filetemplates.json" + }, { "language": "flutter", "path": "./snippets/frameworks/flutter.json" diff --git a/snippets/frameworks/django/filetemplates.json b/snippets/frameworks/django/filetemplates.json new file mode 100644 index 00000000..c6561f38 --- /dev/null +++ b/snippets/frameworks/django/filetemplates.json @@ -0,0 +1,35 @@ +{ + "Django URLFile Template":{ + "prefix": "fturl", + "body": [ + "from django.urls import path", + "from . import views as v", + "\n\napp_name = ${1:AppName}", + "urlpatterns = [", + "\t# TODO: Define $1 URLs here", + "\t${0}", + "]" + ], + "description": "Django File-Template Sinppet For ``URL`` File" + }, + "Django FormFile Template":{ + "prefix": "ftform", + "body": [ + "from django import forms", + "from ${1:.models} import ${2}", + "\n\n# TODO: Create your forms here", + "${0}" + ], + "description": "Django File-Template Sinppet For ``Form`` File" + }, + "Django CustomTagsFile Template":{ + "prefix": "ftcutomtags", + "body": [ + "from django import template", + "\nregister = template.Library()", + "\n# TODO: Create your custom tags here", + "${0}" + ], + "description": "Django File-Template Sinppet For ``CustomTags`` File" + } +} diff --git a/snippets/frameworks/django/forms.json b/snippets/frameworks/django/forms.json new file mode 100644 index 00000000..5b2c3193 --- /dev/null +++ b/snippets/frameworks/django/forms.json @@ -0,0 +1,168 @@ +{ + "Django Simple Form ":{ + "prefix": "sform", + "body": [ + "class ${1:Name}Form(forms.Form):", + "\t# Define $1Form fields here", + "\t${0}" + ], + "description": "Django Simple Form" + }, + "Django Model Form ":{ + "prefix": "modelform", + "body": [ + "class ${1:ModelName}Form(forms.ModelForm):", + "\tclass Meta:", + "\t\tmodel = ${2:$1}", + "\t\tfields = (${3:\"__all__\"})", + "\t\t${0}" + ], + "description": "Django Model Form" + }, + "Forms BooleanField":{ + "prefix": "fbool", + "body": "${1:FIELDNAME} = forms.BooleanField(${2})", + "description": "Django forms ``BooleanField``" + }, + "Forms CharField":{ + "prefix": "fchar", + "body": "${1:FIELDNAME} = forms.CharField(${2})", + "description": "Django forms ``CharField``" + }, + "Forms ComboField":{ + "prefix": "fcombo", + "body": "${1:FIELDNAME} = forms.ComboField(${2})", + "description": "Django forms ``ComboField``" + }, + "Forms DateField":{ + "prefix": "fdate", + "body": "${1:FIELDNAME} = forms.DateField(${2})", + "description": "Django forms ``DateField``" + }, + "Forms DateTime":{ + "prefix": "fdatetime", + "body": "${1:FIELDNAME} = forms.DateTime(${2})", + "description": "Django forms ``DateTime``" + }, + "Forms DecimalField":{ + "prefix": "fdecimal", + "body": "${1:FIELDNAME} = forms.DecimalField(${2})", + "description": "Django forms ``DecimalField``" + }, + "Forms DurationField":{ + "prefix": "fduration", + "body": "${1:FIELDNAME} = forms.DurationField(${2})", + "description": "Django forms ``DurationField``" + }, + "Forms EmailField":{ + "prefix": "femail", + "body": "${1:FIELDNAME} = forms.EmailField(${2})", + "description": "Django forms ``EmailField``" + }, + "Forms FileField":{ + "prefix": "ffile", + "body": "${1:FIELDNAME} = forms.FileField(${2})", + "description": "Django forms ``FileField``" + }, + "Forms FilePathField":{ + "prefix": "ffilepath", + "body": "${1:FIELDNAME} = forms.FilePathField(${2})", + "description": "Django forms ``FilePathField``" + }, + "Forms FloatField":{ + "prefix": "ffloat", + "body": "${1:FIELDNAME} = forms.FloatField(${2})", + "description": "Django forms ``FloatField``" + }, + "Forms GenericIPAddressField":{ + "prefix": "fgip", + "body": "${1:FIELDNAME} = forms.GenericIPAddressField(${2})", + "description": "Django forms ``GenericIPAddressField``" + }, + "Forms GenericIPAddressField":{ + "prefix": "fgip", + "body": "${1:FIELDNAME} = forms.GenericIPAddressField(${2})", + "description": "Django forms ``GenericIPAddressField``" + }, + "Forms ImageField":{ + "prefix": "fimg", + "body": "${1:FIELDNAME} = forms.ImageField(${2})", + "description": "Django forms ``ImageField``" + }, + "Forms IntegerField":{ + "prefix": "fint", + "body": "${1:FIELDNAME} = forms.IntegerField(${2})", + "description": "Django forms ``IntegerField``" + }, + "Forms IPAddressField":{ + "prefix": "fip", + "body": "${1:FIELDNAME} = forms.IPAddressField(${2})", + "description": "Django forms ``IPAddressField``" + }, + "Forms ModelChoiceField":{ + "prefix": "fmochoice", + "body": "${1:FIELDNAME} = forms.ModelChoiceField(${2})", + "description": "Django forms ``ModelChoiceField``" + }, + "Forms ModelMultipleChoiceField":{ + "prefix": "fmomuchoice", + "body": "${1:FIELDNAME} = forms.ModelMultipleChoiceField(${2})", + "description": "Django forms ``ModelMultipleChoiceField``" + }, + "Forms MultipleChoiceField":{ + "prefix": "fmuchoice", + "body": "${1:FIELDNAME} = forms.MultipleChoiceField(${2})", + "description": "Django forms ``MultipleChoiceField``" + }, + "Forms MultipleValueField":{ + "prefix": "fmuvalue", + "body": "${1:FIELDNAME} = forms.MultipleValueField(${2})", + "description": "Django forms ``MultipleValueField``" + }, + "Forms NullBooleanField":{ + "prefix": "fnullbool", + "body": "${1:FIELDNAME} = forms.NullBooleanField(${2})", + "description": "Django forms ``NullBooleanField``" + }, + "Forms RegexField":{ + "prefix": "fregex", + "body": "${1:FIELDNAME} = forms.RegexField(${2})", + "description": "Django forms ``RegexField``" + }, + "Forms SlugField":{ + "prefix": "fslug", + "body": "${1:FIELDNAME} = forms.SlugField(${2})", + "description": "Django forms ``SlugField``" + }, + "Forms SplitDateTime":{ + "prefix": "fsdatetime", + "body": "${1:FIELDNAME} = forms.SplitDateTime(${2})", + "description": "Django forms ``SplitDateTime`` Field" + }, + "Forms TimeField":{ + "prefix": "ftime", + "body": "${1:FIELDNAME} = forms.TimeField(${2})", + "description": "Django forms ``TimeField``" + }, + "Forms TypedChoiceField":{ + "prefix": "ftchoice", + "body": "${1:FIELDNAME} = forms.TypedChoiceField(${2})", + "description": "Django forms ``TypedChoiceField``" + }, + "Forms TypedMultipleChoiceField":{ + "prefix": "ftmuchoice", + "body": "${1:FIELDNAME} = forms.TypedMultipleChoiceField(${2})", + "description": "Django forms ``TypedMultipleChoiceField``" + }, + "Forms URLField":{ + "prefix": "fulr", + "body": "${1:FIELDNAME} = forms.URLField(${2})", + "description": "Django forms ``URLField``" + }, + "Forms UUIDField":{ + "prefix": "fuuid", + "body": "${1:FIELDNAME} = forms.UUIDField(${2})", + "description": "Django forms ``UUIDField``" + } + +} diff --git a/snippets/frameworks/django/imports.json b/snippets/frameworks/django/imports.json new file mode 100644 index 00000000..d099fb96 --- /dev/null +++ b/snippets/frameworks/django/imports.json @@ -0,0 +1,43 @@ +{ + "Import forms":{ + "prefix": "di-forms", + "body": "from django import forms", + "description": "Import Django ``forms``" + }, + "Import models":{ + "prefix": "di-model", + "body": "from django import models", + "description": "Import Django ``models``" + }, + "Import get_user_model":{ + "prefix": "di-getusermodel", + "body": "from django.contrib.auth import get_user_model", + "description": "Import Django ``get_user_model``" + }, + "Import generic views":{ + "prefix": "di-generic", + "body": "from django.views import generic", + "description": "Import Django ``generic``" + }, + "Import JsonResponse":{ + "prefix": "di-jsonresponse", + "body": "from django.http import JsonResponse", + "description": "Import Django ``JsonResponse``" + }, + "Import reverse":{ + "prefix": "di-reverse", + "body": "from django.urls import reverse", + "description": "Import Django ``reverse``" + }, + "Import reverse_lazy":{ + "prefix": "di-reverse_lazy", + "body": "from django.urls import revers_lazy", + "description": "Import Django ``revers_lazy``" + }, + + "Import messages":{ + "prefix": "di-messages", + "body": "from django.contrib import messages", + "description": "Import Django ``messages``" + } +} diff --git a/snippets/frameworks/django/models.json b/snippets/frameworks/django/models.json new file mode 100644 index 00000000..c0b656cf --- /dev/null +++ b/snippets/frameworks/django/models.json @@ -0,0 +1,183 @@ +{ + "Django Simple Model": { + "prefix": "smodel", + "body": [ + "class ${1:ModelName}(models.Model):", + "\t# Define $1 fields here", + "\t${2}", + "\n\tclass Meta:", + "\t\tordering = [\"${3:-pk}\"]", + "\t\tverbose_name = \"${4:$1}\"", + "\t\tverbose_name_plural = \"${5:$1s}\"", + "\n\tdef __str__(self):", + "\t\treturn ${6:super().__str__()}", + "\n\t# Define $1 properties here", + "\t${0}" + ], + "description": "Django Simple Model with properties and attributes" + }, + "Django Full Model": { + "prefix": "model", + "body": [ + "class ${1:ModelName}(models.Model):", + "\t# Define $1 fields here", + "\t${2}", + "\n\tclass Meta:", + "\t\tordering = [\"${3:-pk}\"]", + "\t\tverbose_name = \"${4:$1}\"", + "\t\tverbose_name_plural = \"${5:$1s}\"", + "\n\tdef __str__(self):", + "\t\treturn ${6:super().__str__()}", + "\n\tdef save(self, *args, **kwargs):", + "\t\treturn ${7:super().save(*args, **kwargs)}", + "\n\tdef get_absolute_url(self):", + "\t\treturn reverse('${8:view_or_url_name}', kwargs={${9:'pk'}: ${10: self.pk}})", + "\n\t# Define $1 properties here", + "\t${0}" + ], + "description": "Django Full Model with properties and attributes" + }, + + "Models AutoField":{ + "prefix": "mauto", + "body": "${1:FIELDNAME} = models.AutoField(${2})", + "description": "Django model ``AutoField``" + }, + "Models BigIntegerField":{ + "prefix": "mbigint", + "body": "${1:FIELDNAME} = models.AutoField(${2})", + "description": "Django model ``AutoField``" + }, + "Models BinaryField":{ + "prefix": "mbinary", + "body": "${1:FIELDNAME} = models.BinaryField(${2})", + "description": "Django model ``BinaryField``" + }, + "Models Boolean":{ + "prefix": "mbool", + "body": "${1:FIELDNAME} = models.BooleanField(default=${2:False})", + "description": "Django model ``BooleanField``" + }, + "Models CharField":{ + "prefix": "mchar", + "body": "${1:FieldName} = models.CharField(max_length=${2:32})", + "description": "Django model ``CharField``" + }, + "Models CommaSeparatedIntegerField":{ + "prefix": "mcomma", + "body": "${1:FIELDNAME} = models.CommaSeparatedIntegerField(max_length=${2})", + "description": "Django model ``CommaSeparatedIntegerField``" + }, + "Models DateField":{ + "prefix": "mdate", + "body": "${1:FIELDNAME} = models.DateField(auto_now_add=${2:True}, auto_now=${3:False}})", + "description": "Django model ``DateField``" + }, + "Models DateTimeField":{ + "prefix": "mdatetime", + "body": "${1:FIELDNAME} = models.DateTimeField(auto_now_add=${2:True}, auto_now=${3:False})", + "description": "Django model ``DateTimeField``" + }, + "Models DecimalField":{ + "prefix": "mdecimal", + "body": "${1:FIELDNAME} = models.DecimalField(max_digits=${2}, decimal_places=${3})", + "description": "Django model ``DecimalField``" + }, + "Models EmailField":{ + "prefix": "memail", + "body": "${1:FIELDNAME} = models.EmailField(${2})", + "description": "Django model ``EmailField``" + }, + "Models FileField":{ + "prefix": "mfile", + "body": "${1:FIELDNAME} = models.FileField(upload_to=${2:path/for/upload})", + "description": "Django model ``FileField``" + }, + "Models FilePathField":{ + "prefix": "mfilepath", + "body": "${1:FIELDNAME} = models.FilePathField(path=${2:\"/abs/path/to/dir\"}${3:, max_length=100}${4:, match=\"*.ext\"}${4:, recursive=True})", + "description": "Django model ``FilePathField``" + }, + "Models FloatField":{ + "prefix": "mfloat", + "body": "${1:FIELDNAME} = models.FloatField(${2})", + "description": "Django model ``FloatField``" + }, + "Models ImageField":{ + "prefix": "mimg", + "body": "${1:FIELDNAME} = models.ImageField(upload_to=${2:path/for/upload}${3:, height_field=height, width_field=width}${4:, max_length=100})", + "description": "Django model ``ImageField``" + }, + "Models IntegerField":{ + "prefix": "mint", + "body": "${1:FIELDNAME} = models.IntegerField(${2})", + "description": "Django model ``IntegerField``" + }, + "Models IPAddressField":{ + "prefix": "mip", + "body": "${1:FIELDNAME} = models.IPAddressField(${2})", + "description": "Django model ``IPAddressField``" + }, + "Models NullBooleanField":{ + "prefix": "mnullboolean", + "body": "${1:FIELDNAME} = models.NullBooleanField(${2})", + "description": "Django model ``NullBooleanField``" + }, + "Models PositiveIntegerField":{ + "prefix": "mposint", + "body": "${1:FIELDNAME} = models.PositiveIntegerField(${2})", + "description": "Django model ``PositiveIntegerField``" + }, + "Models PositiveSmallIntegerField":{ + "prefix": "mpossmallint", + "body": "${1:FIELDNAME} = models.PositiveSmallIntegerField(${2})", + "description": "Django model ``PositiveSmallIntegerField``" + }, + "Models SlugField":{ + "prefix": "mslug", + "body": "${1:FIELDNAME} = models.SlugField(${2})", + "description": "Django model ``SlugField``" + }, + "Models SmallIntegerField":{ + "prefix": "msmallint", + "body": "${1:FIELDNAME} = models.SmallIntegerField(${2})", + "description": "Django model ``SmallIntegerField``" + }, + "Models TextField":{ + "prefix": "mtext", + "body": "${1:FIELDNAME} = models.TextField(${2})", + "description": "Django model ``TextField``" + }, + "Models TimeField":{ + "prefix": "mtime", + "body": "${1:FIELDNAME} = models.TimeField(auto_now_add=${2:True}, auto_now=${3:False})", + "description": "Django model ``TimeField``" + }, + "Models URLField":{ + "prefix": "murl", + "body": "${1:FIELDNAME} = models.URLField(verify_exists=${2:False})", + "description": "Django model ``URLField``" + }, + "Models XMLField":{ + "prefix": "mxml", + "body": "${1:FIELDNAME} = models.XMLField(schema_path=${2:None})", + "description": "Django model ``XMLField``" + }, + + "Models ForeignKey":{ + "prefix": "fk", + "body": "${1:FIELDNAME} = models.ForeignKey(${2:OtherModel}, on_delete=models.${3:CASCADE}, related_name=\"${4:RelatedName}\" ${0:, limit_choices_to=})", + "description": "Django model ``ForeignKey``" + }, + "Models ManyToManyField":{ + "prefix": "m2m", + "body": "${1:FIELDNAME} = models.ManyToManyField(${2:OtherModel}, related_name=\"${3:RelatedName}\" ${0:, limit_choices_to=})", + "description": "Django model ``ManyToManyField``" + }, + "Models OneToOneField":{ + "prefix": "o2o", + "body": "${1:FIELDNAME} = models.OneToOneField(${2:OtherModel}, related_name=\"${4:RelatedName}\"${0:, to_field=''})", + "description": "Django model ``OneToOneField``" + } +} + diff --git a/snippets/frameworks/django/views.json b/snippets/frameworks/django/views.json new file mode 100644 index 00000000..4faa9170 --- /dev/null +++ b/snippets/frameworks/django/views.json @@ -0,0 +1,243 @@ +{ + "Django CreateView":{ + "prefix": "createview", + "body": [ + "class ${1:ModelName}CreateView(generic.CreateView):", + "\tmodel = ${2:$1}", + "\ttemplate_name = \"${3:$1/$1_form.html}\"", + "\tform_class = ${4:forms.$1Form}", + "\tsuccess_url = \"${5:.}\"" + ], + "description": "Django CBV ``CreateView``" + }, + "Django UpdateView":{ + "prefix": "updateview", + "body": [ + "class ${1:ModelName}UpdateView(generic.UpdateView):", + "\tmodel = ${2:$1}", + "\ttemplate_name = \"${3:$1/$1_form.html}\"", + "\tform_class = ${4:forms.$1Form}", + "\tsuccess_url = \"${5:.}\"", + "\n\tdef get_object(self):", + "\t\treturn $1.objects.get(pk=${6:self.kwargs.get(\"pk\")})" + ], + "description": "Django CBV ``UpdateView``" + }, + "Django DeleteView":{ + "prefix": "deleteview", + "body": [ + "class ${1:ModelName}DeleteView(generic.DeleteView):", + "\tmodel = ${2:$1}", + "\n\tdef get_success_url(self):", + "\t\treturn reverse(\"${3:$1:list}\")", + "\n\tdef get(self, request, *args, **kwargs):", + "\t\treturn post(request, *args, **kwargs)" + ], + "description": "Django CBV ``DeleteView``" + }, + "Django DetailView":{ + "prefix": "detailview", + "body": [ + "class ${1:ModelName}DetailView(generic.DetailView):", + "\tmodel = ${2:$1}", + "\ttemplate_name = \"${3:$1/$1_detail.html}\"", + "\n\tdef get_object(self):", + "\t\treturn $1.objects.get(pk=${4:self.kwargs.get(\"pk\")})", + "\n\tdef get_queryset(self):", + "\t\treturn $1.objects.filter(${5})" + ], + "description": "Django CBV ``DetailView``" + }, + "Django ListView":{ + "prefix": "listview", + "body": [ + "class ${1:ModelName}ListView(generic.ListView):", + "\tmodel = ${2:$1}", + "\ttemplate_name = \"${3:$1/$1_list.html}\"", + "\n\tdef get_queryset(self):", + "\t\treturn $1.objects.filter(${4})" + ], + "description": "Django CBV ``ListView``" + }, + "Django TemplateView":{ + "prefix": "templateview", + "body": [ + "class ${1:ModelName}TemplateView(generic.TemplateView):", + "\ttemplate_name = \"${2:$1/$1_list.html}\"", + "\n${3}" + ], + "description": "Django CBV ``TemplateView``" + }, + "Django FormView":{ + "prefix": "formview", + "body": [ + "class ${1:ModelName}FormView(generic.FormView):", + "\tform_class = ${2:forms.$1Form}", + "\ttemplate_name = \"${3}\"" + ], + "description": "Django CBV ``FormView``" + }, + "Django AdminView":{ + "prefix": "adminview", + "body": [ + "@admin.register($1)", + "class ${1:ModelName}Admin(admin.ModelAdmin):", + "\tlist_display = ${2:\"pk\",}", + "\tsearch_fields = ${3:\"pk\",}", + "\tlist_filter = ${4:\"FilterFields\",}" + ], + "description": "Django AdminView for ``admin.py``" + }, + "Django AdminTabularInline":{ + "prefix": "tabularinline", + "body": [ + "class ${1:ModelName}Inline(admin.TabularInline):", + "\tmodel = ${2:$1}", + "\tmin_num = ${4:0}", + "\tmax_num = ${4:8}", + "\textra = ${5:1}" + ], + "description": "Django TabularInline for ``admin.py``" + }, + "Django AdminStackedInline":{ + "prefix": "stackedinline", + "body": [ + "class ${1:ModelName}Inline(admin.StackedInline):", + "\tmodel = ${2:$1}", + "\tmin_num = ${4:0}", + "\tmax_num = ${4:8}", + "\textra = ${5:1}" + ], + "description": "Django StackedInline for ``admin.py``" + }, + + "Django Views get_context_data":{ + "prefix": "getcontextdata", + "body": [ + "def get_context_data(self, *args, **kwargs):", + "\tcontext = super().get_context_data(*args, **kwargs)", + "\treturn context" + ], + "description": "Django Views ``get_context_data`` method" + }, + "Django Views get_success_url":{ + "prefix": "getsuccessurl", + "body": [ + "def get_success_url(self):", + "\treturn reverse(\"${1:ViewName}\", kwargs={${2:\"pk\": self.get_object().pk}})" + ], + "description": "Django Views ``get_success_url`` method" + }, + "Django Views get_queryset":{ + "prefix": "getqueryset", + "body": [ + "def get_queryset(self):", + "\treturn ${1:ModelName}.objects.filter(${2})" + ], + "description": "Django Views ``get_queryset`` method" + }, + "Django Views get_object":{ + "prefix": "getobject", + "body": [ + "def get_object(self):", + "\treturn ${1:ModelName}.objects.get(${2})" + ], + "description": "Django Views ``get_object`` method" + }, + "Django Views form_valid":{ + "prefix": "formvalid", + "body": [ + "def form_valid(self, form):", + "\treturn super().form_valid(form)" + ], + "description": "Django Views ``form_valid`` method" + }, + "Django Views form_invalid":{ + "prefix": "forminvalid", + "body": [ + "def form_invalid(self, form):", + "\treturn super().form_invalid(form)" + ], + "description": "Django Views ``form_invalid`` method" + }, + "Django Views get_form_kwargs":{ + "prefix": "getformkwargs", + "body": [ + "def get_form_kwargs(self, form):", + "\tkwargs = super().get_form_kwargs()", + "\treturn kwargs" + ], + "description": "Django Views ``get_form_kwargs`` method" + }, + "Django Views dispatch":{ + "prefix": "dispatch", + "body": [ + "def dispatch(self, request, *args, **kwargs):", + "\treturn super().dispatch(request, *args, **kwargs)" + ], + "description": "Django Views ``dispatch`` method" + }, + "Django Views get_initial":{ + "prefix": "getinitial", + "body": [ + "def get_initial(self):", + "\tinit = super().get_initial()", + "\treturn init" + ], + "description": "Django Views ``get_initial`` method" + }, + "Django Views post":{ + "prefix": "post", + "body": [ + "def post(self, request, *args, **kwargs):", + "\treturn super().post(request, *args, **kwargs)" + ], + "description": "Django Views ``post`` method" + }, + "Django Views get":{ + "prefix": "get", + "body": [ + "def get(self, request, *args, **kwargs):", + "\treturn super().get(request, *args, **kwargs)" + ], + "description": "Django Views ``post`` method" + }, + + + "Django Forms field_clean":{ + "prefix": "cleanf", + "body": [ + "def clean_${1:FieldName}(self):", + "\t$1 = self.cleaned_data[\"$1\"]", + "\t${0}", + "\treturn $1" + ], + "description": "Django Views ``field_clean`` method" + }, + "Django Forms clean":{ + "prefix": "cleanff", + "body": [ + "def clean(self):", + "\tcleaned_data = super().clean()", + "\t${0}" + ], + "description": "Django Views ``clean`` method" + }, + + + "Django FBV Path":{ + "prefix": "fpath", + "body": "path(\"${1:Path}\", v.${2:View}, name=${0:PathName})", + "description": "Django Path For ``Function Based Views``" + }, + "Django CBV Path":{ + "prefix": "cpath", + "body": "path(\"${1:Path}\", v.${2:View}.as_viewJ(), name=${0:PathName})", + "description": "Django Path For ``Class Based Views``" + }, + "Django Path as Include":{ + "prefix": "ipath", + "body": "path(\"${1:Path}\", include(\"${2}.urls\", namespace=${0:Name})", + "description": "Django Path as ``Include``" + } +}