多个参数 url 模式 django 2.0
multiple parameters url pattern django 2.0
我想在我的 url 模式中传递两个参数,但我收到错误的无反向匹配,即 'projects'。虽然只有一个参数可以正常工作。
这里是主要的 urls 文件-
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})
模板-
"{% url 'projects' projectid=project.id stepno=step.step_no %}"
您可以像这样更轻松地做您想做的事情(没有正则表达式)。您可以找到 documentation details here.
path('some_page/<int:project_id>/', views.some_page, name='some_page'),
上面我的 urlpattern 函数如下所示:
def some_page(request, project_id):
project = Project.objects.get(id=project_id)
return render(request, 'project.html', {'project': project})
请记住,您需要一个 Project
模型才能正常工作,其中包含数据。
你的模板应该是这样的:
<p>{{ project.modelfieldname1 }}</p>
<p>{{ project.modelfieldname2 }}</p>
您可以执行以下操作。
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 */')
有关 django 2.0 中正则表达式模式的更多详细信息,您可以查看 django 文档 link。
https://docs.djangoproject.com/en/2.1/topics/http/urls/
无需正则表达式匹配或额外的模型字段即可运行。
urls.py
path('custom_page/<str:id1>/<str:id2>/', views.custom_page, name='custom_page'),
views.py
def custom_page(request, id1, id2):
#use in view func or pass to template via context
context = {}
context['id1'] = id1
context['id2'] = id2
return render(request, 'custom_page.html', context=context)
custom_page.html
<div>{{id1}} {{id2}}</div>
我想在我的 url 模式中传递两个参数,但我收到错误的无反向匹配,即 'projects'。虽然只有一个参数可以正常工作。
这里是主要的 urls 文件-
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})
模板-
"{% url 'projects' projectid=project.id stepno=step.step_no %}"
您可以像这样更轻松地做您想做的事情(没有正则表达式)。您可以找到 documentation details here.
path('some_page/<int:project_id>/', views.some_page, name='some_page'),
上面我的 urlpattern 函数如下所示:
def some_page(request, project_id):
project = Project.objects.get(id=project_id)
return render(request, 'project.html', {'project': project})
请记住,您需要一个 Project
模型才能正常工作,其中包含数据。
你的模板应该是这样的:
<p>{{ project.modelfieldname1 }}</p>
<p>{{ project.modelfieldname2 }}</p>
您可以执行以下操作。
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 */')
有关 django 2.0 中正则表达式模式的更多详细信息,您可以查看 django 文档 link。 https://docs.djangoproject.com/en/2.1/topics/http/urls/
无需正则表达式匹配或额外的模型字段即可运行。
urls.py
path('custom_page/<str:id1>/<str:id2>/', views.custom_page, name='custom_page'),
views.py
def custom_page(request, id1, id2):
#use in view func or pass to template via context
context = {}
context['id1'] = id1
context['id2'] = id2
return render(request, 'custom_page.html', context=context)
custom_page.html
<div>{{id1}} {{id2}}</div>