【问题标题】:multiple parameters url pattern django 2.0多参数 url 模式 django 2.0
【发布时间】:2018-12-30 00:57:56
【问题描述】:

我想在我的 url 模式中传递两个参数,但我收到错误无反向匹配,即“项目”。虽然它只适用于一个参数。

这里是主要的 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 %}"

【问题讨论】:

    标签: python-3.x django-urls django-2.0


    【解决方案1】:

    你可以更轻松地做你想做的事(不用正则表达式)。你可以找到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>
    

    【讨论】:

      【解决方案2】:

      您可以执行以下操作。

      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 文档链接。 https://docs.djangoproject.com/en/2.1/topics/http/urls/

      【讨论】:

        【解决方案3】:

        无需正则表达式匹配或其他模型字段即可使其工作。

        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>
        

        【讨论】:

        • 有没有办法让 id2 成为可选?
        • 当然,只是不要在 urls.py views.py 和模板中传递id2
        猜你喜欢
        • 2018-07-07
        • 2018-03-01
        • 2019-01-16
        • 2012-08-07
        • 2018-01-18
        • 2020-09-19
        • 2021-01-29
        • 2018-04-20
        • 2017-05-04
        相关资源
        最近更新 更多