urls.py str有可以用int
path('personal_info<str:name>/', views.personal_info, name='personal_info'),
views.py str:后面的名称要与request后面的参数名称相同
def personal_info(request, name): student = Student.objects.filter(name=name).first() return render(request, 'personal_info.html', context=locals())
student_list.html url引号完后空白+变数
{% for student in students %} <a href="{% url 'app:personal_info' student.name%}">{{student.name}}</a> <br> {% endfor %}
用这种路由规则要小心,如果前面不加personal_info,而是只有<str:name>
的话,它可能就会匹配错误的path,它是按照顺序,由上往下匹配的,举个例子
假设依照下面的路由,那你不管访问任何网址,都只会跑到views.personal_info的页面
path('<str:name>/', views.personal_info, name='personal_info'), path('hello_world/', views.hello_world), path('student_list/', views.student_list, name='student_list'),
对了前面忘记提到(用get的方式传值),只要是在路由跟参数有关西,尽量都要设置一个default值,不然别人修改你的网址很容易出现伺服器错误的代码500(但是404没关西),或是出现资料空白的情况