高级刷锅水 发表于 2023-4-20 17:46:44

小白求助django问题

跳转网页传递参数,但是传的参数是IP,另一个例子传的是数字就不会报错
错误代码

Page not found (404)
Request Method:        GET
Request URL:        http://127.0.0.1:8000/ip/10.116.4.247/edit/
Using the URLconf defined in bysms.urls, Django tried these URL patterns, in this order:
ip/list/
ip/<int:nid>/edit/
The current path, ip/10.116.4.247/edit/, didn’t match any of these.

You’re seeing this error because you have DEBUG = True in your Django settings file. Change that to False, and Django will display a standard 404 page.

部分代码
HTML的
<a class="btn btn-primary btn-xs" href="/ip/{{ obj.ip_address }}/edit/">修改信息</a>

urls的
path('ip/<int:nid>/edit/', views.ip_edit),

views的
def ip_edit(request, nid):
    if request.method == "GET":
      row_object = models.ipinfo.objects.filter(ip_address=nid).first()
      return render(request, "ip_edit.html", {"row_object": row_object})
求大佬解答谢谢

isdkz 发表于 2023-4-20 17:51:27

你好!很高兴能帮助你解决Django问题。从你提供的错误信息和代码来看,问题出在URL配置。因为你的URL中传递的是IP地址而不是整数,所以`<int:nid>`在这里不适用。你需要修改一下你的URL配置来匹配IP地址。

首先,我们需要在`urls.py`中更新URL模式。可以使用`<str:nid>`来代替`<int:nid>`,这样可以匹配IP地址这样的字符串:

path('ip/<str:nid>/edit/', views.ip_edit),


然后,你需要在`views.py`中的`ip_edit`视图中相应地修改参数:

def ip_edit(request, nid):
    if request.method == "GET":
      row_object = models.ipinfo.objects.filter(ip_address=nid).first()
      return render(request, "ip_edit.html", {"row_object": row_object})


这样,你的视图就可以接收IP地址字符串作为参数了。注意,这里的`nid`现在是一个字符串,你不需要对其进行类型转换。

如果你还有其他问题,欢迎继续提问!

歌者文明清理员 发表于 2023-4-20 17:54:43

根据错误信息来看,您的 url 路径参数是 10.116.4.247,但是 views.ip_edit() 函数中接收的参数却是一个整数类型的 nid。因此,需要将路由配置中 <int:nid> 部分修改为 <str:nid>,以便可以正确地接收 IP 地址作为字符串类型的参数。
换句话说,你的IP是xxx.xxx.xxx.xxx,但是views.ip_edit希望这是整数。ip只能用字符串的形式接收
修改后的示例代码如下:
HTML的

<a class="btn btn-primary btn-xs" href="/ip/{{ obj.ip_address }}/edit/">修改信息</a>
urls的

path('ip/<str:nid>/edit/', views.ip_edit),
views的
def ip_edit(request, nid):
    if request.method == "GET":
      row_object = models.ipinfo.objects.filter(ip_address=nid).first()
      return render(request, "ip_edit.html", {"row_object": row_object})

歌者文明清理员 发表于 2023-4-20 17:55:22

回复审核去了,等待片刻

isdkz 发表于 2023-4-20 17:56:03

歌者文明清理员 发表于 2023-4-20 17:55
回复审核去了,等待片刻

我的回复排在你前面{:10_334:}

歌者文明清理员 发表于 2023-4-20 17:56:58

isdkz 发表于 2023-4-20 17:56
我的回复排在你前面

都去审核了{:10_277:}??
我有证据

isdkz 发表于 2023-4-20 17:57:54

被审核了,简单说一下问题,ip不是一个整数,而是字符串,应该要用 <str:nid>

歌者文明清理员 发表于 2023-4-20 17:58:06

isdkz 发表于 2023-4-20 17:57
被审核了,简单说一下问题,ip不是一个整数,而是字符串,应该要用

???@不二如是

isdkz 发表于 2023-4-20 17:58:56

歌者文明清理员 发表于 2023-4-20 17:58
???@不二如是

应该是这个帖子有哪个敏感词,他的帖子也是审核后才放出来的

歌者文明清理员 发表于 2023-4-20 18:00:34

歌者文明清理员 发表于 2023-4-20 18:01:40

isdkz 发表于 2023-4-20 17:58
应该是这个帖子有哪个敏感词,他的帖子也是审核后才放出来的


跳转网页传递参数,但是传的参数是IP,另一个例子传的是数字就不会报错
错误代码

Page not found (404)
Request Method:      GET
Request URL:      http://127.0.0.1:8000/ip/10.116.4.247/edit/
Using the URLconf defined in bysms.urls, Django tried these URL patterns, in this order:
ip/list/
ip/<int:nid>/edit/
The current path, ip/10.116.4.247/edit/, didn’t match any of these.

You’re seeing this error because you have DEBUG = True in your Django settings file. Change that to False, and Django will display a standard 404 page.

部分代码
HTML的
<a class="btn btn-primary btn-xs" href="/ip/{{ obj.ip_address }}/edit/">修改信息</a>

urls的
path('ip/<int:nid>/edit/', views.ip_edit),

views的
def ip_edit(request, nid):
    if request.method == "GET":
      row_object = models.ipinfo.objects.filter(ip_address=nid).first()
      return render(request, "ip_edit.html", {"row_object": row_object})
求大佬解答谢谢

歌者文明清理员 发表于 2023-4-20 18:02:47

isdkz 发表于 2023-4-20 17:58
应该是这个帖子有哪个敏感词,他的帖子也是审核后才放出来的

我复制了他的帖子,也审核了

isdkz 发表于 2023-4-20 18:02:58

歌者文明清理员 发表于 2023-4-20 18:00


不要重复我说过的,说个不一样的{:10_334:}

歌者文明清理员 发表于 2023-4-20 18:08:41

isdkz 发表于 2023-4-20 18:02
不要重复我说过的,说个不一样的


所以最佳给谁

isdkz 发表于 2023-4-20 18:10:47

歌者文明清理员 发表于 2023-4-20 18:08
所以最佳给谁

我去,不讲武德,你还卖惨

歌者文明清理员 发表于 2023-4-20 18:11:13

isdkz 发表于 2023-4-20 18:10
我去,不讲武德,你还卖惨

你不是要说来一个不一样的吗{:10_256:}

高级刷锅水 发表于 2023-4-20 20:09:24

谢谢两位大佬了{:10_281:}
页: [1]
查看完整版本: 小白求助django问题