这里,传入一个非数字字符串'add'没有问题。传入字符串'12'就找不到网页,为什么?

这里,传入一个非数字字符串'add'没有问题。传入字符串'12'就找不到网页,为什么?

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
好帮手乔木 2019-12-20 17:12:33

同学你好:

同学需要将该url对应的视图的逻辑顺序要清楚。

当pk是数字的时候,要做的操作是对该地址的信息进行修改。这时会向数据库查询相应的地址对象。

if pk.isdigit():
   addr = get_object_or_404(UserAddress, pk=pk, user=user, is_valid=True)
   initial['region'] = addr.get_region_format()

pk是主键,根据pk和user查询地址对象。如果没有查到该地址,报404错误。

同学的pk是12,所以会查询pk为12的地址对象。如果没有就会报404错误。显而易见,pk为12的地址同学没有,因此会报错。


如果我解决了同学的问题,请采纳!学习愉快^_^。

  • 提问者 lin丶林 #1
    pk=12的地址和pk=add的地址,为什么会出现不同的情况。没有加数字判断之前…pk=12和pk=add匹配的应该都是address/edit/这个url吧。
    2019-12-20 17:28:12
  • 提问者 lin丶林 #2
    pk=12的地址和pk=add的地址,为什么会出现不同的情况。没有加数字判断之前…pk=12和pk=add匹配的应该都是address/edit/这个url吧。
    2019-12-20 17:28:17
  • 好帮手乔木 回复 提问者 lin丶林 #3
    同学你好:修改和添加共用一个url。url:(r'^user/address/edit/(?P<pk>\S+)/$', views.address_edit, name='address_edit'),这个url对应的视图函数address_edit是需要参数的,参数名为pk。所以12或者add都是该参数的值。至于为什么会出不同的结果。同学看视图函数的逻辑。如果为数字则是修改pk为12的地址修改页面(判断是否是数字:pk.isdigit(),是数字执行下面的代码查询地址对象后,然后渲染到address_edit.html)。否则会直接跳转到address_edit.html页面return render(request,'address_edit.html', { "form": form,})。学习愉快^_^。
    2019-12-20 17:43:44
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
3.从网页搭建入门Python Web
  • 参与学习           人
  • 提交作业       218    份
  • 解答问题       3562    个

本阶段带你用Python开发一个网站,学习主流框架Django+Flask是Python Web开发的第一步,在基础知识上实现积分商城的项目开发,体验真实的项目开发流程,提高解决编程问题和效率的能力。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师