【问题标题】:Django 2.1 - creating the correct path URL for primary keysDjango 2.1 - 为主键创建正确的路径 URL
【发布时间】:2019-01-10 15:15:20
【问题描述】:

我是 Django 新手,我正在尝试创建一个学校数据库 webapp 作为培训练习。(使用 Django 2.1)

我设置了两个模型 School 和 Student。我的主页是数据库中所有学校的列表视图。这些学校中的每一个都是显示学校详细信息和所有学校学生列表的锚参考。每个学校学生也是学生详细信息页面的锚参考。

我的 urls 页面上的路径上出现了错误。

path('<int:pk>/<int:cpk>/',views.StudentDetailView.as_view(),name='student_details'),

此行获取 url 以输出我当前所在学校的主键和我选择的学生的主键。

当我单击学生姓名时,它会转到与学校具有相同主键的学生,因为 URL 是 (basic_app/1/1/)。如何让它从 url (ckp) 中的第二个数字中提取并显示该主键数据?

例如,pk 为 1 的学校有 10 名学生。在学校详细信息页面上,它列出了所有学生。当我点击学生 3 时,url 看起来像 basic_app/1/3/ (基于上面的路径代码),但它只会显示学生 1 的详细信息。我必须编辑什么才能得到这个找到合适的学生(views.py、models.py、urls.py、html 文件)?

【问题讨论】:

    标签: python django django-models django-views django-urls


    【解决方案1】:

    有三种方法可以解决这个问题:

    在 urls.py 中

    from django.urls import path
    
    urlpatterns = [
        path('<int:pk>/',SchoolDetailView.as_view(), name='detail')
        
    ]
    

    (或): 在 urls.py 中

    from django.urls import re_path
    
    urlpatterns = [
        re_path(r'^(?P<pk>[-\w]+)/$', SchoolDetailView.as_view(), name='detail')
    ]
    

    (或):

    在 urls.py 中:

    from django.conf.urls import url
    
    urlpatterns = [
        url(r'^(?P<pk>[-\w]+)/$', SchoolDetailView.as_view(), name='detail')
    ]
    

    【讨论】:

      【解决方案2】:

      改用这个 path("&lt;int:pk&gt;/",views.SchoolDetailView.as_view(),name='detail')

      【讨论】:

        【解决方案3】:

        如果我理解正确,您的问题基本上是当您访问basic_app/1/3/ 时,您想查看主键为 3 的学生的详细信息,但您看到的是主键为 1 的学生。

        如果是这种情况,那是因为在您看来,您使用的是 URL 字段 pk,而您应该使用的是 cpk。尝试将您的 URL 模式更改为如下所示:

        path('<int:school_pk>/<int:pk>/',views.StudentDetailView.as_view(),name='student_details'),
        

        (如果这不起作用,请发布StudentDetailView的代码。)

        一般来说,我建议使用更具描述性的 URL 字段,例如school_pk, student_pk, ... 这样您就可以避免混淆。

        【讨论】:

          猜你喜欢
          • 2018-06-18
          • 2021-03-23
          • 2019-04-09
          • 2016-12-10
          • 2013-09-01
          • 2020-10-16
          • 1970-01-01
          • 2019-05-26
          • 2016-06-06
          相关资源
          最近更新 更多